diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml
new file mode 100644
index 0000000..c9399aa
--- /dev/null
+++ b/.github/workflows/gh-pages.yml
@@ -0,0 +1,31 @@
+# This is a basic workflow to help you get started with Actions
+
+name: CI
+
+# Controls when the workflow will run
+on:
+ # Triggers the workflow on push events but only for the main branch
+ push:
+ branches: [main]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "build"
+ build:
+ # The type of runner that the job will run on
+ runs-on: ubuntu-latest
+
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v2
+
+ # See https://github.com/marketplace/actions/github-pages-custom-deploy
+ - uses: sterlingwes/gh-pages-deploy-action@v1.1
+ with:
+ access-token: ${{ secrets.ACCESS_TOKEN }}
+ source-directory: example/
+ build-command: npm run build:example
diff --git a/.gitignore b/.gitignore
index 53c1635..956fd14 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
.vscode/
*lock.*
-
+*.lock
build/
node_modules/
diff --git a/README.md b/README.md
index ebe9ec7..21a7475 100644
--- a/README.md
+++ b/README.md
@@ -99,10 +99,40 @@ el.innerHTML = /*html*/ `
document.body!.appendChild(el)
```
+# Caveats
+
+- Don't create built-in elements (f.e. `
` elements) using their
+ constructors. For example, don't do `new HTMLDivElement`, instead use
+ `document.createElement('div')`, or things won't work as expected.
+- AS does not yet support referencing constructors, but the Custom Elements API
+ is one that accepts a constructor as the second argument to
+ `customElements.define('tag-name', YourClass)`. To work around this
+ limitation, the `define()` API should be used like so:
+ ```js
+ customElements.define('tag-name', () => new YourClass(), YourClass.observedAttributes)
+ ```
+ As with built-in elements, do not manually `new` your custom element class,
+ except in the factory function that you pass into `customElements.define()`
+ as the second arg. In other scenarios when you want a ref to your custom
+ element, you can use any pattern that grabs your element from the DOM instead
+ of creating it with `new`.
+ ```js
+ const temp = document.createElement('
')
+ temp.innerHTML = '
'
+ const yourElement = temp.firstElementChild
+ // ...use yourElement...
+ ```
+ This will be improved.
+
# TODO
We will add more DOM APIs as needed while we chisel away.
+- [ ] Improve custom element API to allow directly creating custom element
+ instances from their constructors.
- [ ] Use as-pect for testing.
-- [ ] Import jsdom or undom so that DOM APIs are mocked (on the JavaScript side) during testing (as-pect runs in Node.js not a browser).
-- [ ] Make `document` global. Currently making AS globals is incompatible with TypeScript, so VS Code intellisense doesn't pick up AS globals (https://github.com/AssemblyScript/assemblyscript/issues/1929)
+- [ ] Import jsdom or undom so that DOM APIs are mocked (on the JavaScript
+ side) during testing (as-pect runs in Node.js not a browser).
+- [ ] Make `window` and any of its properties global. Currently making AS
+ globals is incompatible with TypeScript, so VS Code intellisense doesn't pick
+ up AS globals (https://github.com/AssemblyScript/assemblyscript/issues/1929)
diff --git a/assembly/CustomElementRegistry.ts b/assembly/CustomElementRegistry.ts
index d197fb8..c30d141 100644
--- a/assembly/CustomElementRegistry.ts
+++ b/assembly/CustomElementRegistry.ts
@@ -1,10 +1,7 @@
import {HTMLElement} from './elements/HTML/HTMLElement'
+import {define} from './imports'
import {Object} from './Object'
-// @ts-expect-error
-@external('asDOM_CustomElementRegistry', 'define')
-declare function define(id: usize, tag: string, factoryIndex: i32, attributes: string[]): void
-
/*
* Custom elements are a bit too dynamic to easily map an interface to them
* one-to-one like with other DOM APIs, so currently we have to write a bit more
@@ -20,7 +17,7 @@ export class CustomElementRegistry extends Object {
private __defs: Map
HTMLElement> = new Map()
define(tag: string, factory: () => HTMLElement, attributes: string[]): void {
- define(this.__ptr__, tag, factory.index, attributes)
+ define(this, tag, factory.index, attributes)
this.__defs.set(tag, factory)
}
diff --git a/assembly/Document.ts b/assembly/Document.ts
index 6e63f56..dd1b594 100644
--- a/assembly/Document.ts
+++ b/assembly/Document.ts
@@ -1,95 +1,116 @@
-// @ts-expect-error
-@external('asDOM_Document', 'getUrl')
-export declare function getUrl(id: usize): string
-
-// @ts-expect-error
-@external('asDOM_Document', 'setDocument')
-export declare function setDocument(id: usize): void
-
-// @ts-expect-error
-@external('asDOM_Document', 'setElement')
-export declare function setElement(docId: usize, elId: usize, tag: string): void
-
-// @ts-expect-error
-@external('asDOM_Document', 'documentHasBody')
-export declare function documentHasBody(doc: usize): boolean
-
-// @ts-expect-error
-@external('asDOM_Document', 'createTextNode')
-export declare function createTextNode(docId: usize, textId: usize, data: string): void
-
-// TODO Perhaps put these on a new `window` object, to make it more like on the JS side.
import {
- Element,
- Audio,
- HTMLBodyElement,
- HTMLAnchorElement,
- HTMLDivElement,
- HTMLParagraphElement,
- HTMLScriptElement,
- HTMLSpanElement,
- HTMLTemplateElement,
- HTMLUnknownElement,
- Image,
- HTMLHeadingElement,
-} from './elements/index'
+ createElement,
+ createTextNode,
+ getBody,
+ getChildren,
+ getFirstElementChild,
+ getLastElementChild,
+ getLocation,
+ getUrl,
+ querySelector,
+ querySelectorAll,
+ setOnclick,
+} from './imports'
+// TODO Perhaps put these on a new `window` object, to make it more like on the JS side.
+import {Element, HTMLBodyElement, HTMLElement} from './elements/index'
+import {idToNullOrObject, valueNotChanged} from './utils'
import {Node} from './Node'
import {Text} from './Text'
+import {NodeList} from './NodeList'
+import {HTMLCollection} from './HTMLCollection'
+import {Location} from './Location'
export class Document extends Node {
- get nodeType(): i32 { return 9 }
-
- constructor() {
- super()
- setDocument(this.__ptr__)
+ get nodeType(): i32 {
+ return 9
}
get URL(): string {
- return getUrl(this.__ptr__)
+ return getUrl(this)
}
- // @ts-expect-error
+ // Pattern: A value that can change, but if it hasn't changed, we should
+ // return early rather than create a mirror object. We could prevent the
+ // crossing to JS entirely, but that would only work assuming our AS code
+ // is the only code manipulating the DOM. By crossing to JS, we also catch
+ // the case where some other code on the JS side could change the value.
+ //
+ // {{
+
+ private __body: HTMLBodyElement | null = null
+
+ // @ts-expect-error, TS does not allow a getter type to be a superset of the setter type, only the other way around.
get body(): HTMLBodyElement | null {
- let el: HTMLBodyElement
+ const id: i32 = getBody(this)
- if (documentHasBody(this.__ptr__)) {
- el = new HTMLBodyElement()
- setElement(this.__ptr__, el.__ptr__, 'body')
- } else {
- return null
- }
+ if (id == valueNotChanged) return this.__body
+
+ // TODO NULL File a bug and eventually use this. This incorrectly returns `null` instead of the non-null instance... {{
+
+ // return (this.__querySelector = idToNullOrObject(id) as Element | null) // The old value can then be GC'd.
+
+ // }} ...but this version works fine only when the value is not actually null. {{
+
+ // this.__querySelector = idToNullOrObject(id) as Element | null // The old value can then be GC'd.
+ // return this.__querySelector
- return el
+ // }} And finally, this is what works when the value might be null (issue https://github.com/AssemblyScript/assemblyscript/issues/2035) {{
+
+ const result = idToNullOrObject(id)
+ if (result) this.__body = result as HTMLBodyElement
+ else this.__body = null
+ return this.__body
+
+ // }}
}
+
set body(el: HTMLBodyElement) {
- throw ERROR('TODO: document.body setter is not implemented yet.')
+ throw new Error('TODO: document.body setter is not implemented yet.')
+ }
+
+ // }}
+
+ // Pattern: A value that we know can't ever change, so we can cache the
+ // mirror object after the first call. {{
+
+ private __location: Location | null = null
+
+ get location(): Location {
+ let obj = this.__location
+
+ if (!obj) {
+ this.__location = obj = new Location()
+ getLocation(this, obj)
+ }
+
+ return obj
+ }
+
+ set location(l: Location) {
+ ERROR('The setter for window.location cannot currently take a string. Use window.location.href instead.')
+ }
+
+ // }}
+
+ private __onclick: (() => void) | null = null
+
+ set onclick(cb: (() => void) | null) {
+ this.__onclick = cb
+ setOnclick(this, cb ? cb.index : -1) // -1 means "null"
+ }
+
+ get onclick(): (() => void) | null {
+ // For now there is no glue code here, and we assume manipulation of this
+ // property happens only on the AS-side. TODO Eventually we'll have to
+ // figure how to "get" a function that may already exist on the JS side
+ // to be able to call it, for example, in a monkey patch.
+ // return getOnclick()
+ return this.__onclick
}
- createElement(tag: string /*, TODO options */): Element {
- let el: Element
-
- // Don't forget to add Elements here so they can be created with `document.createElement`.
- if (tag == 'body') el = new HTMLBodyElement()
- else if (tag == 'div') el = new HTMLDivElement()
- else if (tag == 'span') el = new HTMLSpanElement()
- else if (tag == 'p') el = new HTMLParagraphElement()
- else if (tag == 'a') el = new HTMLAnchorElement()
- else if (tag == 'script') el = new HTMLScriptElement()
- else if (tag == 'template') el = new HTMLTemplateElement()
- else if (tag == 'audio') el = new Audio()
- else if (tag == 'img') el = new Image()
- else if (tag == 'h1') el = new HTMLHeadingElement()
- else if (tag == 'h2') el = new HTMLHeadingElement()
- else if (tag == 'h3') el = new HTMLHeadingElement()
- else if (tag == 'h4') el = new HTMLHeadingElement()
- else if (tag == 'h5') el = new HTMLHeadingElement()
- else if (tag == 'h6') el = new HTMLHeadingElement()
- else if (tag.indexOf('-') > -1) throw new Error('TODO: Elements with hyphens or custom elements not supported yet.')
- else el = new HTMLUnknownElement()
-
- setElement(this.__ptr__, el.__ptr__, tag)
-
- return el
+ createElement(tagName: string /*, TODO options */): HTMLElement {
+ const id: i32 = createElement(this, tagName)
+ return idToNullOrObject(id) as HTMLElement
}
// TODO, for SVG elements.
@@ -100,10 +121,67 @@ export class Document extends Node {
* @param data String that specifies the nodeValue property of the text node.
*/
createTextNode(data: string): Text {
- const text = new Text
- createTextNode(this.__ptr__, text.__ptr__, data)
- return text
+ const id: i32 = createTextNode(this, data)
+ return idToNullOrObject(id) as Text
}
-}
-export const document = new Document()
+ private __children: HTMLCollection | null = null
+
+ get children(): HTMLCollection {
+ let obj = this.__children
+
+ if (!obj) {
+ this.__children = obj = new HTMLCollection()
+ getChildren(this, obj)
+ }
+
+ return obj
+ }
+
+ private __firstElementChild: Element | null = null
+
+ get firstElementChild(): Element | null {
+ const id: i32 = getFirstElementChild(this)
+
+ if (id == valueNotChanged) return this.__firstElementChild
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__firstElementChild = result as Element
+ else this.__firstElementChild = null
+ return this.__firstElementChild
+ }
+
+ private __lastElementChild: Element | null = null
+
+ get lastElementChild(): Element | null {
+ const id: i32 = getLastElementChild(this)
+
+ if (id == valueNotChanged) return this.__lastElementChild
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__lastElementChild = result as Element
+ else this.__lastElementChild = null
+ return this.__lastElementChild
+ }
+
+ private __querySelector: Element | null = null
+
+ querySelector(selectors: string): Element | null {
+ const id = querySelector(this, selectors)
+
+ if (id == valueNotChanged) return this.__querySelector
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__querySelector = result as Element
+ else this.__querySelector = null
+ return this.__querySelector
+ }
+
+ querySelectorAll(selectors: string): NodeList {
+ const id = querySelectorAll(this, selectors)
+ return idToNullOrObject(id) as NodeList
+ }
+}
diff --git a/assembly/DocumentFragment.ts b/assembly/DocumentFragment.ts
index 1b9390a..91c17f4 100644
--- a/assembly/DocumentFragment.ts
+++ b/assembly/DocumentFragment.ts
@@ -1,7 +1,70 @@
+import {HTMLCollection, Element, NodeList} from '.'
+import {getChildren, getFirstElementChild, getLastElementChild, querySelector, querySelectorAll} from './imports'
import {Node} from './Node'
+import {idToNullOrObject, valueNotChanged} from './utils'
export class DocumentFragment extends Node {
get nodeType(): i32 {
return 11
}
+
+ private __children: HTMLCollection | null = null
+
+ get children(): HTMLCollection {
+ let obj = this.__children
+
+ if (!obj) {
+ this.__children = obj = new HTMLCollection()
+ getChildren(this, obj)
+ }
+
+ return obj
+ }
+
+ private __firstElementChild: Element | null = null
+
+ get firstElementChild(): Element | null {
+ const id: i32 = getFirstElementChild(this)
+
+ if (id == valueNotChanged) return this.__firstElementChild
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__firstElementChild = result as Element
+ else this.__firstElementChild = null
+ return this.__firstElementChild
+ }
+
+ private __lastElementChild: Element | null = null
+
+ get lastElementChild(): Element | null {
+ const id: i32 = getLastElementChild(this)
+
+ if (id == valueNotChanged) return this.__lastElementChild
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__lastElementChild = result as Element
+ else this.__lastElementChild = null
+ return this.__lastElementChild
+ }
+
+ private __querySelector: Element | null = null
+
+ querySelector(selectors: string): Element | null {
+ const id = querySelector(this, selectors)
+
+ if (id == valueNotChanged) return this.__querySelector
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__querySelector = result as Element
+ else this.__querySelector = null
+ return this.__querySelector
+ }
+
+ querySelectorAll(selectors: string): NodeList {
+ const id = querySelectorAll(this, selectors)
+ return idToNullOrObject(id) as NodeList
+ }
}
diff --git a/assembly/EventListener.ts b/assembly/EventListener.ts
new file mode 100644
index 0000000..4b84e05
--- /dev/null
+++ b/assembly/EventListener.ts
@@ -0,0 +1,6 @@
+import {Object} from './Object'
+
+export class EventListener extends Object {
+ /** Subclasses should implement this. */
+ handleEvent(): void {}
+}
diff --git a/assembly/EventTarget.ts b/assembly/EventTarget.ts
new file mode 100644
index 0000000..d113e94
--- /dev/null
+++ b/assembly/EventTarget.ts
@@ -0,0 +1,26 @@
+import {EventListener} from './EventListener'
+import {
+ addEventListenerCallback,
+ addEventListenerObject,
+ removeEventListenerCallback,
+ removeEventListenerObject,
+} from './imports'
+import {Object} from './Object'
+
+export type EventCallback = (/*TODO event: Event*/) => void
+
+export class EventTarget extends Object {
+ addEventListener(eventName: string, listener: T): void {
+ // TODO how to check the function matches EventCallback?
+ if (isFunction(listener)) addEventListenerCallback(this, eventName, listener.index)
+ else if (listener instanceof EventListener) addEventListenerObject(this, eventName, listener)
+ else ERROR('addEventListener expects an EventCallback or an EventListener as the second argument.')
+ }
+
+ removeEventListener(eventName: string, listener: T): void {
+ // TODO how to check the function matches EventCallback?
+ if (isFunction(listener)) removeEventListenerCallback(this, eventName, listener.index)
+ else if (listener instanceof EventListener) removeEventListenerObject(this, eventName, listener)
+ else ERROR('removeEventListener expects an EventCallback or an EventListener as the second argument.')
+ }
+}
diff --git a/assembly/HTMLCollection.ts b/assembly/HTMLCollection.ts
new file mode 100644
index 0000000..15b87e9
--- /dev/null
+++ b/assembly/HTMLCollection.ts
@@ -0,0 +1,38 @@
+import {getLength, item} from './imports'
+import {Element} from './elements/Element'
+import {Object} from './Object'
+import {idToNullOrObject, valueNotChanged} from './utils'
+
+export class HTMLCollection extends Object {
+ get length(): i32 {
+ return getLength(this)
+ }
+
+ private __item: Element | null = null
+
+ item(index: i32): Element | null {
+ const id: i32 = item(this, index)
+
+ if (id == valueNotChanged) return this.__item
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id) // The old value can then be GC'd.
+ if (result) this.__item = result as Element
+ else this.__item = null
+ return this.__item
+ }
+
+ @operator('[]')
+ private arrayRead(index: i32): Element | null {
+ return this.item(index)
+ }
+
+ @operator('[]=')
+ private arrayWrite(index: i32, value: Element): void {
+ ERROR('NodeList is not writable.')
+ }
+
+ // This makes TypeScript happy.
+ // The name must be "key" in AS (can be anything in TS). Open issue: https://github.com/AssemblyScript/assemblyscript/issues/1972
+ readonly [key: number]: Element | null
+}
diff --git a/assembly/History.ts b/assembly/History.ts
new file mode 100644
index 0000000..c236506
--- /dev/null
+++ b/assembly/History.ts
@@ -0,0 +1,19 @@
+import {getLength, pushState, replaceState} from './imports'
+import {Object} from './Object'
+
+// TODO, for now, it is only possible to pass empty state. There are no dynamic objects in AssemblyScript.
+export class EmptyHistoryState extends Object {}
+
+export class History extends Object {
+ get length(): i32 {
+ return getLength(this)
+ }
+
+ pushState(state: EmptyHistoryState, title: string, url: string = ''): void {
+ pushState(this, state, title, url)
+ }
+
+ replaceState(state: EmptyHistoryState, title: string, url: string = ''): void {
+ replaceState(this, state, title, url)
+ }
+}
diff --git a/assembly/Location.ts b/assembly/Location.ts
new file mode 100644
index 0000000..b786dcb
--- /dev/null
+++ b/assembly/Location.ts
@@ -0,0 +1,98 @@
+import {
+ getHash,
+ getHost,
+ getHostname,
+ getHref,
+ getOrigin,
+ getPathname,
+ getPort,
+ getProtocol,
+ getSearch,
+ reload,
+ replace,
+ setHash,
+ setHost,
+ setHostname,
+ setHref,
+ setPathname,
+ setPort,
+ setProtocol,
+ setSearch,
+} from './imports'
+import {Object} from './Object'
+
+export class Location extends Object {
+ set href(str: string) {
+ setHref(this, str)
+ }
+ get href(): string {
+ return getHref(this)
+ }
+
+ set protocol(str: string) {
+ setProtocol(this, str)
+ }
+ get protocol(): string {
+ return getProtocol(this)
+ }
+
+ set host(str: string) {
+ setHost(this, str)
+ }
+ get host(): string {
+ return getHost(this)
+ }
+
+ set hostname(str: string) {
+ setHostname(this, str)
+ }
+ get hostname(): string {
+ return getHostname(this)
+ }
+
+ set port(str: string) {
+ setPort(this, str)
+ }
+ get port(): string {
+ return getPort(this)
+ }
+
+ set pathname(str: string) {
+ setPathname(this, str)
+ }
+ get pathname(): string {
+ return getPathname(this)
+ }
+
+ set search(str: string) {
+ setSearch(this, str)
+ }
+ get search(): string {
+ return getSearch(this)
+ }
+
+ set hash(str: string) {
+ setHash(this, str)
+ }
+ get hash(): string {
+ return getHash(this)
+ }
+
+ get origin(): string {
+ return getOrigin(this)
+ }
+
+ assign(url: string): void {
+ // No need for additional bindings here because this is identical to what happens in the real DOM Location API.
+ setHref(this, url)
+ }
+
+ reload(): void {
+ reload(this)
+ }
+
+ replace(url: string): void {
+ // No need for additional bindings here because this is identical to what happens in the real DOM Location API.
+ replace(this, url)
+ }
+}
diff --git a/assembly/Node.ts b/assembly/Node.ts
index 7bd5ab2..d1a3f1a 100644
--- a/assembly/Node.ts
+++ b/assembly/Node.ts
@@ -1,73 +1,19 @@
-import {document} from './Document'
+import {idToNullOrObject, valueNotChanged} from './utils'
import {
- Audio,
- HTMLAnchorElement,
- HTMLBodyElement,
- HTMLDivElement,
- HTMLHeadingElement,
- HTMLParagraphElement,
- HTMLScriptElement,
- HTMLSpanElement,
- HTMLTemplateElement,
- HTMLUnknownElement,
- Image,
-} from './elements/index'
-import {Object} from './Object'
-import {refs} from './refs'
-
-// @ts-expect-error
-@external('asDOM_Node', 'nodeAppendChild')
-export declare function nodeAppendChild(parentId: usize, childId: usize): void
-
-// @ts-expect-error
-@external('asDOM_Node', 'nodeRemoveChild')
-export declare function nodeRemoveChild(parentId: usize, childId: usize): void
-
-// @ts-expect-error
-@external('asDOM_Node', 'getParentNode')
-declare function getParentNode(id: usize): i32
-
-// @ts-expect-error
-@external('asDOM_Node', 'getFirstChild')
-export declare function getFirstChild(id: usize): i32
-
-// @ts-expect-error
-@external('asDOM_Node', 'cloneNode')
-export declare function cloneNode(id: usize, deep?: boolean): i32
-
-// @ts-expect-error
-@external('asDOM_Node', 'log')
-declare function log(msg: string): void
-
-// // @ts-expect-error
-// @external('asDOM_Document', 'trackNextElement')
-// declare function trackNextElement(docId: usize, elId: usize): void
-
-// @ts-expect-error
-@external('asDOM', 'trackNextRef')
-declare function trackNextRef(id: usize): void
-
-// TODO Put this in a file shared between glue code and AS code. We need to
-// convert the glue code to TypeScript first, or compile the shared file to
-// plain JS.
-enum ElementType {
- unknown = 1,
- body = 2,
- div = 3,
- span = 4,
- p = 5,
- a = 6,
- script = 7,
- template = 8,
- audio = 9,
- img = 10,
- h1 = 11,
- h2 = 12,
- h3 = 13,
- h4 = 14,
- h5 = 15,
- h6 = 16,
-}
+ nodeAppendChild,
+ nodeRemoveChild,
+ getFirstChild,
+ cloneNode,
+ getParentNode,
+ getChildNodes,
+ getNextSibling,
+ getPreviousSibling,
+ getLastChild,
+ getParentElement,
+} from './imports'
+import {NodeList} from './NodeList'
+import {EventTarget} from './EventTarget'
+import {Element} from '.'
/** Node types: https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType */
enum NodeType {
@@ -84,7 +30,7 @@ enum NodeType {
// 12 is deprecated and skipped.
}
-export abstract class Node extends Object {
+export abstract class Node extends EventTarget {
static ELEMENT_NODE: NodeType = NodeType.ELEMENT_NODE
static ATTRIBUTE_NODE: NodeType = NodeType.ATTRIBUTE_NODE
static TEXT_NODE: NodeType = NodeType.TEXT_NODE
@@ -96,134 +42,116 @@ export abstract class Node extends Object {
static DOCUMENT_FRAGMENT_NODE: NodeType = NodeType.DOCUMENT_FRAGMENT_NODE
appendChild(child: T): T {
- nodeAppendChild(this.__ptr__, child.__ptr__)
+ nodeAppendChild(this, child)
return child
}
removeChild(child: T): T {
- nodeRemoveChild(this.__ptr__, child.__ptr__)
+ nodeRemoveChild(this, child)
return child
}
abstract get nodeType(): NodeType
- // This property exists only for a small optimization in the first early
- // return of parentNode. Is it even worth it?
- private __parent: Node | null
+ private __parentNode: Node | null = null
get parentNode(): Node | null {
- const id: i32 = getParentNode(this.__ptr__)
+ const id: i32 = getParentNode(this)
- log('AS: parent node ID:' + id.toString())
+ if (id == valueNotChanged) return this.__parentNode
- const parent = this.__parent
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__parentNode = result as Node
+ else this.__parentNode = null
+ return this.__parentNode
+ }
- if (parent && parent.__ptr__ == id) return parent
- else if (id > 0) {
- this.__parent = refs.get(id as usize) as Node // It must be a Node.
- return this.__parent
- }
+ private __parentElement: Element | null = null
- // if null, it means there is no element on the JS-side.
- else if (id == 0) {
- this.__parent = null
- return null
- }
- // If negative, there is an element on the JS-side that doesn't have a
- // corresponding AS-side instance yet. In this case we need to
- // create a new instance based on its type.
- else if (id < 0) {
- const el = makeNode(-id)
-
- // Associate the AS-side instance with the JS-side instance.
- // TODO use this.ownerDocument.__ptr__ instead of document.__ptr__
- // trackNextElement(document.__ptr__, el.__ptr__)
- trackNextRef(el.__ptr__)
-
- this.__parent = el
- return el
- }
+ get parentElement(): Element | null {
+ const id: i32 = getParentElement(this)
+
+ if (id == valueNotChanged) return this.__parentElement
- throw new Error('This should not happen.')
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__parentElement = result as Element
+ else this.__parentElement = null
+ return this.__parentElement
}
+ private __firstChild: Node | null = null
+
get firstChild(): Node | null {
- const id: i32 = getFirstChild(this.__ptr__)
+ const id: i32 = getFirstChild(this)
- log('AS: first child ID:' + id.toString())
+ if (id == valueNotChanged) return this.__firstChild
- // if null, it means there is no element on the JS-side.
- if (id == 0) return null
- // If negative, there is an element on the JS-side that doesn't have a
- // corresponding AS-side instance yet. In this case we need to
- // create a new instance based on its type.
- else if (id < 0) {
- const el = makeNode(-id)
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__firstChild = result as Node
+ else this.__firstChild = null
+ return this.__firstChild
+ }
- // Associate the AS-side instance with the JS-side instance.
- // TODO use this.ownerDocument.__ptr__ instead of document.__ptr__
- // trackNextElement(document.__ptr__, el.__ptr__)
- trackNextRef(el.__ptr__)
+ private __lastChild: Node | null = null
- return el
- }
+ get lastChild(): Node | null {
+ const id: i32 = getLastChild(this)
- // If we reach here then there is already an AS-side instance
- // associated with a JS-side instance, and the JS side gave us the ID
- // (pointer) of our AS-side object to return. We might reach here, for
- // example, if we use appendChild to pass an existing child within AS
- // instead of using innerHTML. By using innerHTML and sending a string
- // to JS, it can create a whole tree but none of those nodes will be
- // tracked. Finally, if we do try to access them, we lazily associate
- // new AS-side objects in the previous conditional block.
- else {
- return refs.get(id) as Node // It must be a Node.
- }
+ if (id == valueNotChanged) return this.__lastChild
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__lastChild = result as Node
+ else this.__lastChild = null
+ return this.__lastChild
}
- cloneNode(deep: boolean = false): Node {
- const id: i32 = cloneNode(this.__ptr__, deep)
+ private __nextSibling: Node | null = null
- log('AS: cloned node ID:' + id.toString())
+ get nextSibling(): Node | null {
+ const id: i32 = getNextSibling(this)
- // If negative, there is an element on the JS-side that doesn't have a
- // corresponding AS-side instance yet. In this case we need to
- // create a new instance based on its type.
- if (id < 0) {
- const el = makeNode(-id)
+ if (id == valueNotChanged) return this.__nextSibling
- // Associate the AS-side instance with the JS-side instance.
- // TODO use this.ownerDocument.__ptr__ instead of document.__ptr__
- // trackNextElement(document.__ptr__, el.__ptr__)
- trackNextRef(el.__ptr__)
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__nextSibling = result as Node
+ else this.__nextSibling = null
+ return this.__nextSibling
+ }
- return el
- }
+ private __previousSibling: Node | null = null
+
+ get previousSibling(): Node | null {
+ const id: i32 = getPreviousSibling(this)
+
+ if (id == valueNotChanged) return this.__previousSibling
- throw new Error('This should not happen.')
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__previousSibling = result as Node
+ else this.__previousSibling = null
+ return this.__previousSibling
}
-}
-function makeNode(type: ElementType): Node {
- let el: Node
-
- if (type == ElementType.body) el = new HTMLBodyElement()
- else if (type == ElementType.div) el = new HTMLDivElement()
- else if (type == ElementType.span) el = new HTMLSpanElement()
- else if (type == ElementType.p) el = new HTMLParagraphElement()
- else if (type == ElementType.a) el = new HTMLAnchorElement()
- else if (type == ElementType.script) el = new HTMLScriptElement()
- else if (type == ElementType.template) el = new HTMLTemplateElement()
- else if (type == ElementType.audio) el = new Audio()
- else if (type == ElementType.img) el = new Image()
- else if (type == ElementType.h1) el = new HTMLHeadingElement()
- else if (type == ElementType.h2) el = new HTMLHeadingElement()
- else if (type == ElementType.h3) el = new HTMLHeadingElement()
- else if (type == ElementType.h4) el = new HTMLHeadingElement()
- else if (type == ElementType.h5) el = new HTMLHeadingElement()
- else if (type == ElementType.h6) el = new HTMLHeadingElement()
- else if (type === ElementType.unknown) el = new HTMLUnknownElement()
- else throw new Error('Hyphenated or custom elements not yet supported.')
-
- return el
+ cloneNode(deep: boolean = false): Node {
+ const id: i32 = cloneNode(this, deep)
+ return idToNullOrObject(id) as Node // The result must not be null if we just cloned a Node.
+ }
+
+ private __childNodes: NodeList | null = null
+
+ get childNodes(): NodeList {
+ let obj = this.__childNodes
+
+ if (!obj) {
+ this.__childNodes = obj = new NodeList()
+ getChildNodes(this, obj)
+ }
+
+ return obj
+ }
}
diff --git a/assembly/NodeList.ts b/assembly/NodeList.ts
new file mode 100644
index 0000000..00cabc3
--- /dev/null
+++ b/assembly/NodeList.ts
@@ -0,0 +1,39 @@
+import {getLength, item} from './imports'
+import {Node} from './Node'
+import {Object} from './Object'
+import {idToNullOrObject, valueNotChanged} from './utils'
+
+// TODO replace `Node` with a generic `T` type to allow other classes to specify more specific types in certain cases. For example, `querySelectorAll` can return `NodeList`.
+export class NodeList extends Object {
+ get length(): i32 {
+ return getLength(this)
+ }
+
+ private __item: T | null = null
+
+ item(index: i32): T | null {
+ const id: i32 = item(this, index)
+
+ if (id == valueNotChanged) return this.__item
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id) // The old value can then be GC'd.
+ if (result) this.__item = result as T
+ else this.__item = null
+ return this.__item
+ }
+
+ @operator('[]')
+ private arrayRead(index: i32): T | null {
+ return this.item(index)
+ }
+
+ @operator('[]=')
+ private arrayWrite(index: i32, value: T): void {
+ ERROR('NodeList is not writable.')
+ }
+
+ // This makes TypeScript happy.
+ // The name must be "key" in AS (can be anything in TS). Open issue: https://github.com/AssemblyScript/assemblyscript/issues/1972
+ readonly [key: number]: T | null
+}
diff --git a/assembly/Object.ts b/assembly/Object.ts
index cad9414..e58a321 100644
--- a/assembly/Object.ts
+++ b/assembly/Object.ts
@@ -1,21 +1,10 @@
-import {refs} from './refs'
+import {toString} from './imports'
/**
* The base class that all objects extend from.
*/
export class Object {
- __ptr__: usize = changetype(this)
-
- constructor() {
- refs.set(this.__ptr__, this)
+ toString(): string {
+ return toString(this)
}
}
-
-/**
- * Call this function when you are finished using an object. After calling
- * this, it should never be used again, or the DOM bindings may fail to work
- * properly.
- */
-export function unbind(o: Object): void {
- refs.delete(o.__ptr__)
-}
diff --git a/assembly/ObjectType.ts b/assembly/ObjectType.ts
new file mode 100644
index 0000000..ccc4169
--- /dev/null
+++ b/assembly/ObjectType.ts
@@ -0,0 +1,33 @@
+// TODO Put this in a file shared between glue code and AS code. We need to
+// convert the glue code to TypeScript first, or compile the shared file to
+// plain JS.
+export enum ObjectType {
+ // 0 is intentionally skipped, do not use 0
+
+ unknown = 1,
+
+ body = 2,
+ div = 3,
+ span = 4,
+ p = 5,
+ a = 6,
+ script = 7,
+ template = 8,
+ audio = 9,
+ img = 10,
+ h1 = 11,
+ h2 = 12,
+ h3 = 13,
+ h4 = 14,
+ h5 = 15,
+ h6 = 16,
+ canvas = 17,
+
+ // Text nodes
+ text = 100,
+
+ // Node lists
+ htmlCollection = 200,
+ nodeListOfNode = 201,
+ nodeListOfElement = 202,
+}
diff --git a/assembly/Window.ts b/assembly/Window.ts
index 3d1f187..b39cc88 100644
--- a/assembly/Window.ts
+++ b/assembly/Window.ts
@@ -1,30 +1,112 @@
import {CustomElementRegistry} from './CustomElementRegistry'
-import {Object} from './Object'
+import {Document} from './Document'
+import {
+ getCustomElements,
+ getDocument,
+ getHistory,
+ getLocation,
+ setOnclick,
+ setOnpopstate,
+ trackWindow,
+} from './imports'
+import {History} from './History'
+import {EventTarget} from './EventTarget'
+import {Location} from './Location'
-// @ts-expect-error
-@external('asDOM_Window', 'getCustomElements')
-declare function getCustomElements(id: usize, ceId: usize): void
+export class Window extends EventTarget {
+ private __document: Document | null = null
-// @ts-expect-error
-@external('asDOM_Window', 'trackWindow')
-declare function trackWindow(id: usize): void
+ get document(): Document {
+ let obj = this.__document
-export class Window extends Object {
- private __ceRegistry: CustomElementRegistry | null = null
+ if (!obj) {
+ this.__document = obj = new Document()
+ getDocument(this, obj)
+ }
+
+ return obj
+ }
+
+ private __customElements: CustomElementRegistry | null = null
get customElements(): CustomElementRegistry {
- let reg = this.__ceRegistry
+ let obj = this.__customElements
+
+ if (!obj) {
+ this.__customElements = obj = new CustomElementRegistry()
+ getCustomElements(this, obj)
+ }
+
+ return obj
+ }
+
+ private __history: History | null = null
+
+ get history(): History {
+ let obj = this.__history
+
+ if (!obj) {
+ this.__history = obj = new History()
+ getHistory(this, obj)
+ }
+
+ return obj
+ }
- if (!reg) {
- this.__ceRegistry = reg = new CustomElementRegistry()
- getCustomElements(this.__ptr__, reg.__ptr__)
+ private __location: Location | null = null
+
+ get location(): Location {
+ let obj = this.__location
+
+ if (!obj) {
+ this.__location = obj = new Location()
+ getLocation(this, obj)
}
- return reg
+ return obj
+ }
+
+ set location(l: Location) {
+ ERROR('The setter for window.location cannot currently take a string. Use window.location.href instead.')
+ }
+
+ private __onclick: (() => void) | null = null
+
+ set onclick(cb: (() => void) | null) {
+ this.__onclick = cb
+ setOnclick(this, cb ? cb.index : -1) // -1 means "null"
+ }
+
+ get onclick(): (() => void) | null {
+ // For now there is no glue code here, and we assume manipulation of this
+ // property happens only on the AS-side. TODO Eventually we'll have to
+ // figure how to "get" a function that may already exist on the JS side
+ // to be able to call it, for example, in a monkey patch.
+ // return getOnclick()
+ return this.__onclick
+ }
+
+ private __onpopstate: (() => void) | null = null
+
+ set onpopstate(cb: (() => void) | null) {
+ this.__onpopstate = cb
+ setOnpopstate(this, cb ? cb.index : -1) // -1 means "null"
+ }
+
+ get onpopstate(): (() => void) | null {
+ // For now there is no glue code here, and we assume manipulation of this
+ // property happens only on the AS-side. TODO Eventually we'll have to
+ // figure how to "get" a function that may already exist on the JS side
+ // to be able to call it, for example, in a monkey patch.
+ // return getOnpopstate()
+ return this.__onpopstate
}
}
export const window = new Window()
-trackWindow(window.__ptr__)
+trackWindow(window)
+// export "globals"
+export const document = window.document
export const customElements = window.customElements
+export const history = window.history
diff --git a/assembly/__finalize.ts b/assembly/__finalize.ts
new file mode 100644
index 0000000..1500268
--- /dev/null
+++ b/assembly/__finalize.ts
@@ -0,0 +1,16 @@
+import {releaseObject} from './imports'
+import {Object} from './Object'
+
+// @ts-ignore
+@global
+function __finalize(ptr: usize): void {
+ if (
+ // prettier-ignore
+ // @ts-ignore, function exists
+ __instanceof(
+ ptr, idof()
+ )
+ ) {
+ releaseObject(ptr)
+ }
+}
diff --git a/assembly/elements/Element.ts b/assembly/elements/Element.ts
index f5741f5..37088ea 100644
--- a/assembly/elements/Element.ts
+++ b/assembly/elements/Element.ts
@@ -1,75 +1,186 @@
-import { Node } from "../Node"
+import {
+ elClick,
+ elGetAttribute,
+ getInnerHTML,
+ setOnclick,
+ elSetAttribute,
+ setInnerHTML,
+ getChildren,
+ getFirstElementChild,
+ getLastElementChild,
+ getNextElementSibling,
+ getPreviousElementSibling,
+ querySelector,
+ querySelectorAll,
+ remove,
+ getTagName,
+ attachShadow,
+ getClientWidth,
+ getClientHeight,
+} from '../imports'
+import {idToNullOrObject, valueNotChanged} from '../utils'
+import {Node} from '../Node'
+import {HTMLCollection} from '../HTMLCollection'
+import {NodeList} from '../NodeList'
+import {ShadowRoot} from '../nodes/ShadowRoot'
-// @ts-expect-error
-@external('asDOM_Element', 'elSetAttribute')
-export declare function elSetAttribute(id: usize, attr: string, value: string | null): void
-
-// @ts-expect-error
-@external('asDOM_Element', 'elGetAttribute')
-export declare function elGetAttribute(id: usize, attr: string): string | null
-
-// @ts-expect-error
-@external('asDOM_Element', 'elSetInnerHTML')
-export declare function elSetInnerHTML(id: usize, value: string | null): void
+export abstract class Element extends Node {
+ get nodeType(): i32 {
+ return 1
+ }
-// @ts-expect-error
-@external('asDOM_Element', 'elGetInnerHTML')
-export declare function elGetInnerHTML(id: usize): string
+ get tagName(): string {
+ return getTagName(this)
+ }
-// @ts-expect-error
-@external('asDOM_Element', 'elSetInnerText')
-export declare function elSetInnerText(id: usize, value: string | null): void
+ setAttribute(attr: string, value: string | null): void {
+ elSetAttribute(this, attr, value)
+ }
+ getAttribute(attr: string): string | null {
+ return elGetAttribute(this, attr)
+ }
-// @ts-expect-error
-@external('asDOM_Element', 'elGetInnerText')
-export declare function elGetInnerText(id: usize): string
+ get innerHTML(): string {
+ return getInnerHTML(this)
+ }
+ set innerHTML(value: string | null) {
+ setInnerHTML(this, value)
+ }
-// @ts-expect-error
-@external('asDOM_Element', 'elClick')
-export declare function elClick(id: usize): void
+ private __children: HTMLCollection | null = null
-// @ts-expect-error
-@external('asDOM_Element', 'elOnClick')
-export declare function elOnClick(id: usize, ptr: number): void
+ get children(): HTMLCollection {
+ let obj = this.__children
-// @ts-expect-error
-@external('asDOM_Element', 'remove')
-export declare function remove(id: usize): void
+ if (!obj) {
+ this.__children = obj = new HTMLCollection()
+ getChildren(this, obj)
+ }
-export abstract class Element extends Node {
- get nodeType(): i32 { return 1 }
+ return obj
+ }
- setAttribute(attr: string, value: string | null): void {
- elSetAttribute(this.__ptr__, attr, value)
+ get clientWidth(): i32 {
+ return getClientWidth(this)
}
- getAttribute(attr: string): string | null {
- return elGetAttribute(this.__ptr__, attr)
+
+ get clientHeight(): i32 {
+ return getClientHeight(this)
}
- get innerHTML(): string {
- return elGetInnerHTML(this.__ptr__)
+ private __firstElementChild: Element | null = null
+
+ get firstElementChild(): Element | null {
+ const id: i32 = getFirstElementChild(this)
+
+ if (id == valueNotChanged) return this.__firstElementChild
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__firstElementChild = result as Element
+ else this.__firstElementChild = null
+ return this.__firstElementChild
}
- set innerHTML(value: string | null) {
- elSetInnerHTML(this.__ptr__, value)
+
+ private __lastElementChild: Element | null = null
+
+ get lastElementChild(): Element | null {
+ const id: i32 = getLastElementChild(this)
+
+ if (id == valueNotChanged) return this.__lastElementChild
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__lastElementChild = result as Element
+ else this.__lastElementChild = null
+ return this.__lastElementChild
}
- get innerText(): string {
- return elGetInnerText(this.__ptr__)
+ private __nextElementSibling: Element | null = null
+
+ get nextElementSibling(): Element | null {
+ const id: i32 = getNextElementSibling(this)
+
+ if (id == valueNotChanged) return this.__nextElementSibling
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__nextElementSibling = result as Element
+ else this.__nextElementSibling = null
+ return this.__nextElementSibling
}
- set innerText(value: string | null) {
- elSetInnerText(this.__ptr__, value)
+
+ private __previousElementSibling: Element | null = null
+
+ get previousElementSibling(): Element | null {
+ const id: i32 = getPreviousElementSibling(this)
+
+ if (id == valueNotChanged) return this.__previousElementSibling
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__previousElementSibling = result as Element
+ else this.__previousElementSibling = null
+ return this.__previousElementSibling
}
click(): void {
- elClick(this.__ptr__)
+ elClick(this)
+ }
+
+ private __onclick: (() => void) | null = null
+
+ set onclick(cb: (() => void) | null) {
+ this.__onclick = cb
+ setOnclick(this, cb ? cb.index : -1) // -1 means "null"
}
- set onclick(cb: () => void) {
- elOnClick(this.__ptr__, cb.index)
- }
+ get onclick(): (() => void) | null {
+ // For now there is no glue code here, and we assume manipulation of this
+ // property happens only on the AS-side. TODO Eventually we'll have to
+ // figure how to "get" a function that may already exist on the JS side
+ // to be able to call it, for example, in a monkey patch.
+ // return getOnclick()
+ return this.__onclick
+ }
remove(): void {
- remove(this.__ptr__)
+ remove(this)
+ }
+
+ private __querySelector: Element | null = null
+
+ querySelector(selectors: string): Element | null {
+ const id = querySelector(this, selectors)
+
+ if (id == valueNotChanged) return this.__querySelector
+
+ // TODO update this once null issues fixed (see TODO NULL in Document)
+ const result = idToNullOrObject(id)
+ if (result) this.__querySelector = result as Element
+ else this.__querySelector = null
+ return this.__querySelector
+ }
+
+ querySelectorAll(selectors: string): NodeList {
+ const id = querySelectorAll(this, selectors)
+ return idToNullOrObject(id) as NodeList
+ }
+
+ private __shadowRoot: ShadowRoot | null = null
+
+ get shadowRoot(): ShadowRoot | null {
+ return this.__shadowRoot
+ }
+
+ attachShadow(options: ShadowRootInit): ShadowRoot {
+ const root = new ShadowRoot()
+ attachShadow(this, root, options.mode)
+ if (options.mode == 'open') this.__shadowRoot = root
+ return root
}
}
+export class ShadowRootInit {
+ mode: string
+}
diff --git a/assembly/elements/HTML/Audio.ts b/assembly/elements/HTML/Audio.ts
index 1b52d3a..e44c351 100644
--- a/assembly/elements/HTML/Audio.ts
+++ b/assembly/elements/HTML/Audio.ts
@@ -1,39 +1,23 @@
-// @ts-expect-error
-@external('asDOM_Audio', 'initAudio')
-export declare function initAudio(src: string, id: usize): void
-// @ts-expect-error
-@external('asDOM_Audio', 'pauseAudio')
-export declare function pauseAudio(id: usize): void
-// @ts-expect-error
-@external('asDOM_Audio', 'playAudio')
-export declare function playAudio(id: usize): void
-
-// @ts-expect-error
-@external('asDOM_Audio', 'getAutoplay')
-export declare function getAutoplay(id: usize): u32
-// @ts-expect-error
-@external('asDOM_Audio', 'setAutoplay')
-export declare function setAutoplay(toggle: u32, id: usize): void
-
-import { HTMLElement } from "./HTMLElement";
+import {initAudio, playAudio, pauseAudio, setAutoplay, getAutoplay} from '../../imports'
+import {HTMLElement} from './HTMLElement'
export class HTMLAudioElement extends HTMLElement {
- constructor(src: string | null = null) {
- super()
- if (src) initAudio(src, this.__ptr__)
- }
- play(): void {
- playAudio(this.__ptr__)
- }
- pause(): void {
- pauseAudio(this.__ptr__)
- }
- set autoplay(toggle: boolean) {
- setAutoplay(toggle ? 1 : 0, this.__ptr__)
- }
- get autoplay(): boolean {
- return getAutoplay(this.__ptr__) ? true : false
- }
+ constructor(src: string | null = null) {
+ super()
+ if (src) initAudio(this, src)
+ }
+ play(): void {
+ playAudio(this)
+ }
+ pause(): void {
+ pauseAudio(this)
+ }
+ set autoplay(toggle: boolean) {
+ setAutoplay(this, toggle)
+ }
+ get autoplay(): boolean {
+ return getAutoplay(this) ? true : false
+ }
}
export class Audio extends HTMLAudioElement {}
diff --git a/assembly/elements/HTML/HTMLCanvasElement/HTMLCanvasElement.ts b/assembly/elements/HTML/HTMLCanvasElement/HTMLCanvasElement.ts
new file mode 100644
index 0000000..d9dcd72
--- /dev/null
+++ b/assembly/elements/HTML/HTMLCanvasElement/HTMLCanvasElement.ts
@@ -0,0 +1,70 @@
+import {Object} from '../../../Object'
+import {WebGLRenderingContext} from './webgl/WebGLRenderingContext'
+import {HTMLElement} from '../HTMLElement'
+import {getContext} from '../../../imports'
+
+class WebGL2RenderingContext extends Object {
+ constructor(public canvas: HTMLCanvasElement) {
+ super()
+ }
+ // TODO
+}
+
+class CanvasRenderingContext2D extends Object {
+ constructor(public canvas: HTMLCanvasElement) {
+ super()
+ }
+ // TODO
+}
+
+class ImageBitmapRenderingContext extends Object {
+ constructor(public canvas: HTMLCanvasElement) {
+ super()
+ }
+ // TODO
+}
+
+export class HTMLCanvasElement extends HTMLElement {
+ private __contextType: string | null = null
+ private __context: Object | null = null
+
+ /**
+ * Get a canvas rendering context. Given a particular `type` string, a particular `T` generic must be provided.
+ * If `type` is `"webgl"` then `T` must be `WebGLRenderingContext`.
+ * If `type` is `"webgl2"` then `T` must be `WebGL2RenderingContext`.
+ * If `type` is `"2d"` then `T` must be `CanvasRenderingContext2D`.
+ * If any other combination is given, there will be a compile error.
+ */
+ @inline getContext(type: string): T | null {
+ const currentType = this.__contextType
+ if (currentType) {
+ if (currentType != type) return null
+ else return this.__context as T
+ }
+
+ const obj = instantiate(this)
+
+ let typeNum: i32 = -1
+
+ if (/*type === '2d' &&*/ obj instanceof CanvasRenderingContext2D) {
+ ERROR('CanvasRenderingContext2D is TODO')
+ typeNum = 0
+ } else if (/*type === 'bitmaprenderer' &&*/ obj instanceof ImageBitmapRenderingContext) {
+ ERROR('ImageBitmapRenderingContext is TODO')
+ typeNum = 1
+ } else if (/*type === 'webgl' &&*/ obj instanceof WebGLRenderingContext) {
+ typeNum = 2
+ } else if (/*type === 'webgl2' &&*/ obj instanceof WebGL2RenderingContext) {
+ ERROR('webgl2 is TODO')
+ typeNum = 3
+ } else {
+ ERROR('Invalid context `type` string or `T` type provided, or mismatch between `type` and `T`.')
+ }
+
+ getContext(this, obj, typeNum)
+ this.__context = obj
+ this.__contextType = type
+
+ return obj
+ }
+}
diff --git a/assembly/elements/HTML/HTMLCanvasElement/index.ts b/assembly/elements/HTML/HTMLCanvasElement/index.ts
new file mode 100644
index 0000000..f578e40
--- /dev/null
+++ b/assembly/elements/HTML/HTMLCanvasElement/index.ts
@@ -0,0 +1,2 @@
+export * from './HTMLCanvasElement'
+export * from './webgl/index'
diff --git a/assembly/elements/HTML/HTMLCanvasElement/webgl/WebGLRenderingContext.ts b/assembly/elements/HTML/HTMLCanvasElement/webgl/WebGLRenderingContext.ts
new file mode 100644
index 0000000..2a771f8
--- /dev/null
+++ b/assembly/elements/HTML/HTMLCanvasElement/webgl/WebGLRenderingContext.ts
@@ -0,0 +1,3718 @@
+import {HTMLCanvasElement} from '../../../..'
+import {
+ attachShader,
+ bindBuffer,
+ bufferData,
+ clear,
+ clearColor,
+ clearDepth,
+ compileShader,
+ createBuffer,
+ createProgram,
+ createShader,
+ depthFunc,
+ drawArrays,
+ enable,
+ enableVertexAttribArray,
+ getAttribLocation,
+ getExtension,
+ getUniformLocation,
+ linkProgram,
+ shaderSource,
+ uniformMatrix4fv,
+ useProgram,
+ vertexAttribPointer,
+} from '../../../../imports'
+import {Object} from '../../../../Object'
+
+type WebGLContextAttributes = i32
+
+export type GLenum = u32
+export type GLboolean = bool
+export type GLbitfield = u32
+export type GLbyte = i8
+export type GLshort = i16
+export type GLint = i32
+export type GLsizei = i32
+export type GLintptr = i32 //i64;
+export type GLsizeiptr = i32 //i64;
+export type GLubyte = u8
+export type GLushort = u16
+export type GLuint = u32
+export type GLfloat = f32
+export type GLclampf = f32
+export type GLuint64 = u32 //u64;
+export type GLint64 = i32 //i64;
+
+export class WebGLUniformLocation extends Object {}
+export type TexImageSource = i32
+export type Int32List = i32
+export type Uint32List = i32
+export type Float32List = i32
+export type WebGLQuery = i32
+export type WebGLSampler = i32
+export type WebGLSync = i32
+export type WebGLTransformFeedback = i32
+export type ImageData = i32
+export type DOMString = string
+export type HTMLImageElement = externref
+export type HTMLVideoElement = externref
+export type WebGLVertexArrayObject = i32
+
+// === WebGLContextAttributes ===
+export const ALPHA_DEFAULT = true
+export const FALSE: GLboolean = false
+export const DEPTH_DEFAULT = true
+export const STENCIL_DEFAULT = false
+export const ANTIALIAS_DEFAULT = true
+export const PREMULTIPLIED_ALPHA_DEFAULT = true
+export const PRESERVE_DRAWING_BUFFER_DEFAULT = false
+
+/* ClearBufferMask */
+export const DEPTH_BUFFER_BIT: GLenum = 0x00000100
+export const STENCIL_BUFFER_BIT: GLenum = 0x00000400
+export const COLOR_BUFFER_BIT: GLenum = 0x00004000
+
+/* BeginMode */
+export const POINTS: GLenum = 0x0000
+export const LINES: GLenum = 0x0001
+export const LINE_LOOP: GLenum = 0x0002
+export const LINE_STRIP: GLenum = 0x0003
+export const TRIANGLES: GLenum = 0x0004
+export const TRIANGLE_STRIP: GLenum = 0x0005
+export const TRIANGLE_FAN: GLenum = 0x0006
+
+/* AlphaFunction (not supported in ES20) */
+/* NEVER */
+/* LESS */
+/* EQUAL */
+/* LEQUAL */
+/* GREATER */
+/* NOTEQUAL */
+/* GEQUAL */
+/* ALWAYS */
+
+/* BlendingFactorDest */
+export const ZERO: GLenum = 0
+export const ONE: GLenum = 1
+export const SRC_COLOR: GLenum = 0x0300
+export const ONE_MINUS_SRC_COLOR: GLenum = 0x0301
+export const SRC_ALPHA: GLenum = 0x0302
+export const ONE_MINUS_SRC_ALPHA: GLenum = 0x0303
+export const DST_ALPHA: GLenum = 0x0304
+export const ONE_MINUS_DST_ALPHA: GLenum = 0x0305
+
+/* BlendingFactorSrc */
+/* ZERO */
+/* ONE */
+export const DST_COLOR: GLenum = 0x0306
+export const ONE_MINUS_DST_COLOR: GLenum = 0x0307
+export const SRC_ALPHA_SATURATE: GLenum = 0x0308
+/* SRC_ALPHA */
+/* ONE_MINUS_SRC_ALPHA */
+/* DST_ALPHA */
+/* ONE_MINUS_DST_ALPHA */
+
+/* BlendEquationSeparate */
+export const FUNC_ADD: GLenum = 0x8006
+export const BLEND_EQUATION: GLenum = 0x8009
+export const BLEND_EQUATION_RGB: GLenum = 0x8009
+export const BLEND_EQUATION_ALPHA: GLenum = 0x883d
+
+/* BlendSubtract */
+export const FUNC_SUBTRACT: GLenum = 0x800a
+export const FUNC_REVERSE_SUBTRACT: GLenum = 0x800b
+
+/* Separate Blend Functions */
+export const BLEND_DST_RGB: GLenum = 0x80c8
+export const BLEND_SRC_RGB: GLenum = 0x80c9
+export const BLEND_DST_ALPHA: GLenum = 0x80ca
+export const BLEND_SRC_ALPHA: GLenum = 0x80cb
+export const CONSTANT_COLOR: GLenum = 0x8001
+export const ONE_MINUS_CONSTANT_COLOR: GLenum = 0x8002
+export const CONSTANT_ALPHA: GLenum = 0x8003
+export const ONE_MINUS_CONSTANT_ALPHA: GLenum = 0x8004
+export const BLEND_COLOR: GLenum = 0x8005
+
+/* Buffer Objects */
+export const ARRAY_BUFFER: GLenum = 0x8892
+export const ELEMENT_ARRAY_BUFFER: GLenum = 0x8893
+export const ARRAY_BUFFER_BINDING: GLenum = 0x8894
+export const ELEMENT_ARRAY_BUFFER_BINDING: GLenum = 0x8895
+
+export const STREAM_DRAW: GLenum = 0x88e0
+export const STATIC_DRAW: GLenum = 0x88e4
+export const DYNAMIC_DRAW: GLenum = 0x88e8
+
+export const BUFFER_SIZE: GLenum = 0x8764
+export const BUFFER_USAGE: GLenum = 0x8765
+
+export const CURRENT_VERTEX_ATTRIB: GLenum = 0x8626
+
+/* CullFaceMode */
+export const FRONT: GLenum = 0x0404
+export const BACK: GLenum = 0x0405
+export const FRONT_AND_BACK: GLenum = 0x0408
+
+/* DepthFunction */
+/* NEVER */
+/* LESS */
+/* EQUAL */
+/* LEQUAL */
+/* GREATER */
+/* NOTEQUAL */
+/* GEQUAL */
+/* ALWAYS */
+
+/* EnableCap */
+/* TEXTURE_2D */
+export const CULL_FACE: GLenum = 0x0b44
+export const BLEND: GLenum = 0x0be2
+export const DITHER: GLenum = 0x0bd0
+export const STENCIL_TEST: GLenum = 0x0b90
+export const DEPTH_TEST: GLenum = 0x0b71
+export const SCISSOR_TEST: GLenum = 0x0c11
+export const POLYGON_OFFSET_FILL: GLenum = 0x8037
+export const SAMPLE_ALPHA_TO_COVERAGE: GLenum = 0x809e
+export const SAMPLE_COVERAGE: GLenum = 0x80a0
+
+/* ErrorCode */
+export const NO_ERROR: GLenum = 0
+export const INVALID_ENUM: GLenum = 0x0500
+export const INVALID_VALUE: GLenum = 0x0501
+export const INVALID_OPERATION: GLenum = 0x0502
+export const OUT_OF_MEMORY: GLenum = 0x0505
+
+/* FrontFaceDirection */
+export const CW: GLenum = 0x0900
+export const CCW: GLenum = 0x0901
+
+/* GetPName */
+export const LINE_WIDTH: GLenum = 0x0b21
+export const ALIASED_POINT_SIZE_RANGE: GLenum = 0x846d
+export const ALIASED_LINE_WIDTH_RANGE: GLenum = 0x846e
+export const CULL_FACE_MODE: GLenum = 0x0b45
+export const FRONT_FACE: GLenum = 0x0b46
+export const DEPTH_RANGE: GLenum = 0x0b70
+export const DEPTH_WRITEMASK: GLenum = 0x0b72
+export const DEPTH_CLEAR_VALUE: GLenum = 0x0b73
+export const DEPTH_FUNC: GLenum = 0x0b74
+export const STENCIL_CLEAR_VALUE: GLenum = 0x0b91
+export const STENCIL_FUNC: GLenum = 0x0b92
+export const STENCIL_FAIL: GLenum = 0x0b94
+export const STENCIL_PASS_DEPTH_FAIL: GLenum = 0x0b95
+export const STENCIL_PASS_DEPTH_PASS: GLenum = 0x0b96
+export const STENCIL_REF: GLenum = 0x0b97
+export const STENCIL_VALUE_MASK: GLenum = 0x0b93
+export const STENCIL_WRITEMASK: GLenum = 0x0b98
+export const STENCIL_BACK_FUNC: GLenum = 0x8800
+export const STENCIL_BACK_FAIL: GLenum = 0x8801
+export const STENCIL_BACK_PASS_DEPTH_FAIL: GLenum = 0x8802
+export const STENCIL_BACK_PASS_DEPTH_PASS: GLenum = 0x8803
+export const STENCIL_BACK_REF: GLenum = 0x8ca3
+export const STENCIL_BACK_VALUE_MASK: GLenum = 0x8ca4
+export const STENCIL_BACK_WRITEMASK: GLenum = 0x8ca5
+export const VIEWPORT: GLenum = 0x0ba2
+export const SCISSOR_BOX: GLenum = 0x0c10
+/* SCISSOR_TEST */
+export const COLOR_CLEAR_VALUE: GLenum = 0x0c22
+export const COLOR_WRITEMASK: GLenum = 0x0c23
+export const UNPACK_ALIGNMENT: GLenum = 0x0cf5
+export const PACK_ALIGNMENT: GLenum = 0x0d05
+export const MAX_TEXTURE_SIZE: GLenum = 0x0d33
+export const MAX_VIEWPORT_DIMS: GLenum = 0x0d3a
+export const SUBPIXEL_BITS: GLenum = 0x0d50
+export const RED_BITS: GLenum = 0x0d52
+export const GREEN_BITS: GLenum = 0x0d53
+export const BLUE_BITS: GLenum = 0x0d54
+export const ALPHA_BITS: GLenum = 0x0d55
+export const DEPTH_BITS: GLenum = 0x0d56
+export const STENCIL_BITS: GLenum = 0x0d57
+export const POLYGON_OFFSET_UNITS: GLenum = 0x2a00
+/* POLYGON_OFFSET_FILL */
+export const POLYGON_OFFSET_FACTOR: GLenum = 0x8038
+export const TEXTURE_BINDING_2D: GLenum = 0x8069
+export const SAMPLE_BUFFERS: GLenum = 0x80a8
+export const SAMPLES: GLenum = 0x80a9
+export const SAMPLE_COVERAGE_VALUE: GLenum = 0x80aa
+export const SAMPLE_COVERAGE_INVERT: GLenum = 0x80ab
+
+/* GetTextureParameter */
+/* TEXTURE_MAG_FILTER */
+/* TEXTURE_MIN_FILTER */
+/* TEXTURE_WRAP_S */
+/* TEXTURE_WRAP_T */
+
+export const COMPRESSED_TEXTURE_FORMATS: GLenum = 0x86a3
+
+/* HintMode */
+export const DONT_CARE: GLenum = 0x1100
+export const FASTEST: GLenum = 0x1101
+export const NICEST: GLenum = 0x1102
+
+/* HintTarget */
+export const GENERATE_MIPMAP_HINT: GLenum = 0x8192
+
+/* DataType */
+export const BYTE: GLenum = 0x1400
+export const UNSIGNED_BYTE: GLenum = 0x1401
+export const SHORT: GLenum = 0x1402
+export const UNSIGNED_SHORT: GLenum = 0x1403
+export const INT: GLenum = 0x1404
+export const UNSIGNED_INT: GLenum = 0x1405
+export const FLOAT: GLenum = 0x1406
+
+/* PixelFormat */
+export const DEPTH_COMPONENT: GLenum = 0x1902
+export const ALPHA: GLenum = 0x1906
+export const RGB: GLenum = 0x1907
+export const RGBA: GLenum = 0x1908
+export const LUMINANCE: GLenum = 0x1909
+export const LUMINANCE_ALPHA: GLenum = 0x190a
+
+/* PixelType */
+/* UNSIGNED_BYTE */
+export const UNSIGNED_SHORT_4_4_4_4: GLenum = 0x8033
+export const UNSIGNED_SHORT_5_5_5_1: GLenum = 0x8034
+export const UNSIGNED_SHORT_5_6_5: GLenum = 0x8363
+
+/* Shaders */
+export const FRAGMENT_SHADER: GLenum = 0x8b30
+export const VERTEX_SHADER: GLenum = 0x8b31
+export const MAX_VERTEX_ATTRIBS: GLenum = 0x8869
+export const MAX_VERTEX_UNIFORM_VECTORS: GLenum = 0x8dfb
+export const MAX_VARYING_VECTORS: GLenum = 0x8dfc
+export const MAX_COMBINED_TEXTURE_IMAGE_UNITS: GLenum = 0x8b4d
+export const MAX_VERTEX_TEXTURE_IMAGE_UNITS: GLenum = 0x8b4c
+export const MAX_TEXTURE_IMAGE_UNITS: GLenum = 0x8872
+export const MAX_FRAGMENT_UNIFORM_VECTORS: GLenum = 0x8dfd
+export const SHADER_TYPE: GLenum = 0x8b4f
+export const DELETE_STATUS: GLenum = 0x8b80
+export const LINK_STATUS: GLenum = 0x8b82
+export const VALIDATE_STATUS: GLenum = 0x8b83
+export const ATTACHED_SHADERS: GLenum = 0x8b85
+export const ACTIVE_UNIFORMS: GLenum = 0x8b86
+export const ACTIVE_ATTRIBUTES: GLenum = 0x8b89
+export const SHADING_LANGUAGE_VERSION: GLenum = 0x8b8c
+export const CURRENT_PROGRAM: GLenum = 0x8b8d
+
+/* StencilFunction */
+export const NEVER: GLenum = 0x0200
+export const LESS: GLenum = 0x0201
+export const EQUAL: GLenum = 0x0202
+export const LEQUAL: GLenum = 0x0203
+export const GREATER: GLenum = 0x0204
+export const NOTEQUAL: GLenum = 0x0205
+export const GEQUAL: GLenum = 0x0206
+export const ALWAYS: GLenum = 0x0207
+
+/* StencilOp */
+/* ZERO */
+export const KEEP: GLenum = 0x1e00
+export const REPLACE: GLenum = 0x1e01
+export const INCR: GLenum = 0x1e02
+export const DECR: GLenum = 0x1e03
+export const INVERT: GLenum = 0x150a
+export const INCR_WRAP: GLenum = 0x8507
+export const DECR_WRAP: GLenum = 0x8508
+
+/* StringName */
+export const VENDOR: GLenum = 0x1f00
+export const RENDERER: GLenum = 0x1f01
+export const VERSION: GLenum = 0x1f02
+
+/* TextureMagFilter */
+export const NEAREST: GLenum = 0x2600
+export const LINEAR: GLenum = 0x2601
+
+/* TextureMinFilter */
+/* NEAREST */
+/* LINEAR */
+export const NEAREST_MIPMAP_NEAREST: GLenum = 0x2700
+export const LINEAR_MIPMAP_NEAREST: GLenum = 0x2701
+export const NEAREST_MIPMAP_LINEAR: GLenum = 0x2702
+export const LINEAR_MIPMAP_LINEAR: GLenum = 0x2703
+
+/* TextureParameterName */
+export const TEXTURE_MAG_FILTER: GLenum = 0x2800
+export const TEXTURE_MIN_FILTER: GLenum = 0x2801
+export const TEXTURE_WRAP_S: GLenum = 0x2802
+export const TEXTURE_WRAP_T: GLenum = 0x2803
+
+/* TextureTarget */
+export const TEXTURE_2D: GLenum = 0x0de1
+export const TEXTURE: GLenum = 0x1702
+
+export const TEXTURE_CUBE_MAP: GLenum = 0x8513
+export const TEXTURE_BINDING_CUBE_MAP: GLenum = 0x8514
+export const TEXTURE_CUBE_MAP_POSITIVE_X: GLenum = 0x8515
+export const TEXTURE_CUBE_MAP_NEGATIVE_X: GLenum = 0x8516
+export const TEXTURE_CUBE_MAP_POSITIVE_Y: GLenum = 0x8517
+export const TEXTURE_CUBE_MAP_NEGATIVE_Y: GLenum = 0x8518
+export const TEXTURE_CUBE_MAP_POSITIVE_Z: GLenum = 0x8519
+export const TEXTURE_CUBE_MAP_NEGATIVE_Z: GLenum = 0x851a
+export const MAX_CUBE_MAP_TEXTURE_SIZE: GLenum = 0x851c
+
+/* TextureUnit */
+export const TEXTURE0: GLenum = 0x84c0
+export const TEXTURE1: GLenum = 0x84c1
+export const TEXTURE2: GLenum = 0x84c2
+export const TEXTURE3: GLenum = 0x84c3
+export const TEXTURE4: GLenum = 0x84c4
+export const TEXTURE5: GLenum = 0x84c5
+export const TEXTURE6: GLenum = 0x84c6
+export const TEXTURE7: GLenum = 0x84c7
+export const TEXTURE8: GLenum = 0x84c8
+export const TEXTURE9: GLenum = 0x84c9
+export const TEXTURE10: GLenum = 0x84ca
+export const TEXTURE11: GLenum = 0x84cb
+export const TEXTURE12: GLenum = 0x84cc
+export const TEXTURE13: GLenum = 0x84cd
+export const TEXTURE14: GLenum = 0x84ce
+export const TEXTURE15: GLenum = 0x84cf
+export const TEXTURE16: GLenum = 0x84d0
+export const TEXTURE17: GLenum = 0x84d1
+export const TEXTURE18: GLenum = 0x84d2
+export const TEXTURE19: GLenum = 0x84d3
+export const TEXTURE20: GLenum = 0x84d4
+export const TEXTURE21: GLenum = 0x84d5
+export const TEXTURE22: GLenum = 0x84d6
+export const TEXTURE23: GLenum = 0x84d7
+export const TEXTURE24: GLenum = 0x84d8
+export const TEXTURE25: GLenum = 0x84d9
+export const TEXTURE26: GLenum = 0x84da
+export const TEXTURE27: GLenum = 0x84db
+export const TEXTURE28: GLenum = 0x84dc
+export const TEXTURE29: GLenum = 0x84dd
+export const TEXTURE30: GLenum = 0x84de
+export const TEXTURE31: GLenum = 0x84df
+export const ACTIVE_TEXTURE: GLenum = 0x84e0
+
+/* TextureWrapMode */
+export const REPEAT: GLenum = 0x2901
+export const CLAMP_TO_EDGE: GLenum = 0x812f
+export const MIRRORED_REPEAT: GLenum = 0x8370
+
+/* Uniform Types */
+export const FLOAT_VEC2: GLenum = 0x8b50
+export const FLOAT_VEC3: GLenum = 0x8b51
+export const FLOAT_VEC4: GLenum = 0x8b52
+export const INT_VEC2: GLenum = 0x8b53
+export const INT_VEC3: GLenum = 0x8b54
+export const INT_VEC4: GLenum = 0x8b55
+export const BOOL: GLenum = 0x8b56
+export const BOOL_VEC2: GLenum = 0x8b57
+export const BOOL_VEC3: GLenum = 0x8b58
+export const BOOL_VEC4: GLenum = 0x8b59
+export const FLOAT_MAT2: GLenum = 0x8b5a
+export const FLOAT_MAT3: GLenum = 0x8b5b
+export const FLOAT_MAT4: GLenum = 0x8b5c
+export const SAMPLER_2D: GLenum = 0x8b5e
+export const SAMPLER_CUBE: GLenum = 0x8b60
+
+/* Vertex Arrays */
+export const VERTEX_ATTRIB_ARRAY_ENABLED: GLenum = 0x8622
+export const VERTEX_ATTRIB_ARRAY_SIZE: GLenum = 0x8623
+export const VERTEX_ATTRIB_ARRAY_STRIDE: GLenum = 0x8624
+export const VERTEX_ATTRIB_ARRAY_TYPE: GLenum = 0x8625
+export const VERTEX_ATTRIB_ARRAY_NORMALIZED: GLenum = 0x886a
+export const VERTEX_ATTRIB_ARRAY_POINTER: GLenum = 0x8645
+export const VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: GLenum = 0x889f
+
+/* Shader Source */
+export const COMPILE_STATUS: GLenum = 0x8b81
+
+/* Shader Precision-Specified Types */
+export const LOW_FLOAT: GLenum = 0x8df0
+export const MEDIUM_FLOAT: GLenum = 0x8df1
+export const HIGH_FLOAT: GLenum = 0x8df2
+export const LOW_INT: GLenum = 0x8df3
+export const MEDIUM_INT: GLenum = 0x8df4
+export const HIGH_INT: GLenum = 0x8df5
+
+/* Framebuffer Object. */
+export const FRAMEBUFFER: GLenum = 0x8d40
+export const RENDERBUFFER: GLenum = 0x8d41
+
+export const RGBA4: GLenum = 0x8056
+export const RGB5_A1: GLenum = 0x8057
+export const RGB565: GLenum = 0x8d62
+export const DEPTH_COMPONENT16: GLenum = 0x81a5
+export const STENCIL_INDEX: GLenum = 0x1901
+export const STENCIL_INDEX8: GLenum = 0x8d48
+export const DEPTH_STENCIL: GLenum = 0x84f9
+
+export const RENDERBUFFER_WIDTH: GLenum = 0x8d42
+export const RENDERBUFFER_HEIGHT: GLenum = 0x8d43
+export const RENDERBUFFER_INTERNAL_FORMAT: GLenum = 0x8d44
+export const RENDERBUFFER_RED_SIZE: GLenum = 0x8d50
+export const RENDERBUFFER_GREEN_SIZE: GLenum = 0x8d51
+export const RENDERBUFFER_BLUE_SIZE: GLenum = 0x8d52
+export const RENDERBUFFER_ALPHA_SIZE: GLenum = 0x8d53
+export const RENDERBUFFER_DEPTH_SIZE: GLenum = 0x8d54
+export const RENDERBUFFER_STENCIL_SIZE: GLenum = 0x8d55
+
+export const FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: GLenum = 0x8cd0
+export const FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: GLenum = 0x8cd1
+export const FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: GLenum = 0x8cd2
+export const FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: GLenum = 0x8cd3
+
+export const COLOR_ATTACHMENT0: GLenum = 0x8ce0
+export const DEPTH_ATTACHMENT: GLenum = 0x8d00
+export const STENCIL_ATTACHMENT: GLenum = 0x8d20
+export const DEPTH_STENCIL_ATTACHMENT: GLenum = 0x821a
+
+export const NONE: GLenum = 0
+
+export const FRAMEBUFFER_COMPLETE: GLenum = 0x8cd5
+export const FRAMEBUFFER_INCOMPLETE_ATTACHMENT: GLenum = 0x8cd6
+export const FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: GLenum = 0x8cd7
+export const FRAMEBUFFER_INCOMPLETE_DIMENSIONS: GLenum = 0x8cd9
+export const FRAMEBUFFER_UNSUPPORTED: GLenum = 0x8cdd
+
+export const FRAMEBUFFER_BINDING: GLenum = 0x8ca6
+export const RENDERBUFFER_BINDING: GLenum = 0x8ca7
+export const MAX_RENDERBUFFER_SIZE: GLenum = 0x84e8
+
+export const INVALID_FRAMEBUFFER_OPERATION: GLenum = 0x0506
+
+/* WebGL-specific enums */
+export const UNPACK_FLIP_Y_WEBGL: GLenum = 0x9240
+export const UNPACK_PREMULTIPLY_ALPHA_WEBGL: GLenum = 0x9241
+export const CONTEXT_LOST_WEBGL: GLenum = 0x9242
+export const UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243
+export const BROWSER_DEFAULT_WEBGL: GLenum = 0x9244
+
+export declare function getDrawingBufferWidth(gl: WebGLRenderingContext): GLsizei
+export declare function getDrawingBufferHeight(gl: WebGLRenderingContext): GLsizei
+
+export declare function getContextAttributes(gl: usize): WebGLContextAttributes
+export declare function isContextLost(gl: usize): bool
+
+export declare function getSupportedExtensions(gl: usize): string[]
+
+export class WebGLExtension extends Object {}
+
+export class ANGLE_instanced_arrays extends WebGLExtension {
+ // TODO
+}
+
+export class EXT_blend_minmax extends WebGLExtension {
+ // TODO
+}
+
+export class WebGLProgram extends Object {}
+
+let id = 1
+
+export class WebGLShader extends Object {}
+
+export class WebGLBuffer extends Object {
+ // TODO
+}
+export class WebGLFramebuffer extends Object {
+ // TODO
+}
+export class WebGLRenderbuffer extends Object {
+ // TODO
+}
+export class WebGLTexture extends Object {
+ // TODO
+}
+
+export declare function activeTexture(gl: WebGLRenderingContext, texture: GLenum): void
+// export declare function bindAttribLocation(gl: WebGLRenderingContext, program: WebGLProgram, index: GLuint, name: string): void;
+export declare function bindFramebuffer(gl: WebGLRenderingContext, target: GLenum, framebuffer: WebGLFramebuffer): void
+export declare function bindRenderbuffer(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ renderbuffer: WebGLRenderbuffer,
+): void
+export declare function bindTexture(gl: WebGLRenderingContext, target: GLenum, texture: WebGLTexture): void
+export declare function blendColor(
+ gl: WebGLRenderingContext,
+ red: GLclampf,
+ green: GLclampf,
+ blue: GLclampf,
+ alpha: GLclampf,
+): void
+export declare function blendEquation(gl: WebGLRenderingContext, mode: GLenum): void
+export declare function blendEquationSeparate(gl: WebGLRenderingContext, modeRGB: GLenum, modeAlpha: GLenum): void
+export declare function blendFunc(gl: WebGLRenderingContext, sfactor: GLenum, dfactor: GLenum): void
+export declare function blendFuncSeparate(
+ gl: WebGLRenderingContext,
+ srcRGB: GLenum,
+ dstRGB: GLenum,
+ srcAlpha: GLenum,
+ dstAlpha: GLenum,
+): void
+export declare function bufferSubData(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ offset: GLintptr,
+ data: Array,
+): void
+
+export declare function checkFramebufferStatus(gl: WebGLRenderingContext, target: GLenum): GLenum
+
+export declare function clearStencil(gl: WebGLRenderingContext, s: GLint): void
+
+export declare function colorMask(
+ gl: WebGLRenderingContext,
+ red: GLboolean,
+ green: GLboolean,
+ blue: GLboolean,
+ alpha: GLboolean,
+): void
+
+export declare function compressedTexImage2D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+ border: GLint,
+ data: ArrayBufferView,
+): void
+export declare function compressedTexSubImage2D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ format: GLenum,
+ data: ArrayBufferView,
+): void
+
+export declare function copyTexImage2D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ internalformat: GLenum,
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ border: GLint,
+): void
+export declare function copyTexSubImage2D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+): void
+
+export declare function createFramebuffer(gl: WebGLRenderingContext): WebGLFramebuffer
+export declare function createRenderbuffer(gl: WebGLRenderingContext): WebGLRenderbuffer
+export declare function createTexture(gl: WebGLRenderingContext): WebGLTexture
+
+export declare function cullFace(gl: WebGLRenderingContext, mode: GLenum): void
+//...
+
+export declare function deleteBuffer(gl: WebGLRenderingContext, buffer: WebGLBuffer): void
+export declare function deleteFramebuffer(gl: WebGLRenderingContext, framebuffer: WebGLFramebuffer): void
+export declare function deleteProgram(gl: WebGLRenderingContext, program: WebGLProgram): void
+export declare function deleteRenderbuffer(gl: WebGLRenderingContext, renderbuffer: WebGLRenderbuffer): void
+export declare function deleteShader(gl: WebGLRenderingContext, shader: WebGLShader): void
+export declare function deleteTexture(gl: WebGLRenderingContext, texture: WebGLTexture): void
+
+export declare function depthMask(gl: WebGLRenderingContext, flag: GLboolean): void
+export declare function depthRange(gl: WebGLRenderingContext, zNear: GLclampf, zFar: GLclampf): void
+export declare function detachShader(gl: WebGLRenderingContext, program: WebGLProgram, shader: WebGLShader): void
+export declare function disable(gl: WebGLRenderingContext, cap: GLenum): void
+export declare function disableVertexAttribArray(gl: WebGLRenderingContext, index: GLuint): void
+export declare function drawElements(
+ gl: WebGLRenderingContext,
+ mode: GLenum,
+ count: GLsizei,
+ typ: GLenum,
+ offset: GLintptr,
+): void
+
+export declare function finish(gl: WebGLRenderingContext): void
+export declare function flush(gl: WebGLRenderingContext): void
+export declare function framebufferRenderbuffer(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ attachment: GLenum,
+ renderbuffertarget: GLenum,
+ renderbuffer: WebGLRenderbuffer,
+): void
+export declare function framebufferTexture2D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ attachment: GLenum,
+ textarget: GLenum,
+ texture: WebGLTexture,
+ level: GLint,
+): void
+export declare function frontFace(gl: WebGLRenderingContext, mode: GLenum): void
+
+export declare function generateMipmap(gl: WebGLRenderingContext, target: GLenum): void
+
+// export declare function getActiveAttrib(
+// gl: WebGLRenderingContext,
+// program: WebGLProgram,
+// index: GLuint,
+// ): WebGLActiveInfo
+// export declare function getActiveUniform(
+// gl: WebGLRenderingContext,
+// program: WebGLProgram,
+// index: GLuint,
+// ): WebGLActiveInfo
+// export declare function getAttachedShaders(gl: WebGLRenderingContext, program: WebGLProgram): WebGLShader[]
+
+export declare function getBufferParameter(gl: WebGLRenderingContext, target: GLenum, pname: GLenum): externref // any
+export declare function getParameter(gl: WebGLRenderingContext, pname: GLenum): externref // any
+
+export declare function getError(gl: WebGLRenderingContext): GLenum
+
+export declare function getFramebufferAttachmentParameter(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ attachment: GLenum,
+ pname: GLenum,
+): externref // any
+export declare function getProgramParameter(gl: WebGLRenderingContext, program: WebGLProgram, pname: GLenum): bool // any
+export declare function getProgramInfoLog(gl: WebGLRenderingContext, program: WebGLProgram): DOMString
+export declare function getRenderbufferParameter(gl: WebGLRenderingContext, target: GLenum, pname: GLenum): externref // any
+export declare function getShaderParameter(gl: WebGLRenderingContext, shader: WebGLShader, pname: GLenum): bool // any
+// export declare function getShaderPrecisionFormat(
+// gl: WebGLRenderingContext,
+// shadertype: GLenum,
+// precisiontype: GLenum,
+// ): WebGLShaderPrecisionFormat
+export declare function getShaderInfoLog(gl: WebGLRenderingContext, shader: WebGLShader): DOMString
+
+export declare function getShaderSource(gl: WebGLRenderingContext, shader: WebGLShader): DOMString
+
+export declare function getTexParameter(gl: WebGLRenderingContext, target: GLenum, pname: GLenum): externref // any
+
+export declare function getUniform(
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ location: WebGLUniformLocation,
+): externref // any
+
+export declare function getVertexAttrib(gl: WebGLRenderingContext, index: GLuint, pname: GLenum): externref // any
+
+export declare function getVertexAttribOffset(gl: WebGLRenderingContext, index: GLuint, pname: GLenum): GLsizeiptr
+
+export declare function hint(gl: WebGLRenderingContext, target: GLenum, mode: GLenum): void
+export declare function isBuffer(gl: WebGLRenderingContext, buffer: WebGLBuffer): GLboolean
+export declare function isEnabled(gl: WebGLRenderingContext, cap: GLenum): GLboolean
+export declare function isFramebuffer(gl: WebGLRenderingContext, framebuffer: WebGLFramebuffer): GLboolean
+export declare function isProgram(gl: WebGLRenderingContext, program: WebGLProgram): GLboolean
+export declare function isRenderbuffer(gl: WebGLRenderingContext, renderbuffer: WebGLRenderbuffer): GLboolean
+export declare function isShader(gl: WebGLRenderingContext, shader: WebGLShader): GLboolean
+export declare function isTexture(gl: WebGLRenderingContext, texture: WebGLTexture): GLboolean
+export declare function lineWidth(gl: WebGLRenderingContext, width: GLfloat): void
+export declare function pixelStorei(gl: WebGLRenderingContext, pname: GLenum, param: GLint): void
+export declare function polygonOffset(gl: WebGLRenderingContext, factor: GLfloat, units: GLfloat): void
+
+export declare function readPixels(
+ gl: WebGLRenderingContext,
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ format: GLenum,
+ typ: GLenum,
+ pixels: ArrayBufferView,
+): void
+
+export declare function renderbufferStorage(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+): void
+export declare function sampleCoverage(gl: WebGLRenderingContext, value: GLclampf, invert: GLboolean): void
+export declare function scissor(gl: WebGLRenderingContext, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void
+
+// export declare function shaderSource(gl: WebGLRenderingContext, shader: WebGLShader, source: string): void
+
+export declare function stencilFunc(gl: WebGLRenderingContext, func: GLenum, ref: GLint, mask: GLuint): void
+export declare function stencilFuncSeparate(
+ gl: WebGLRenderingContext,
+ face: GLenum,
+ func: GLenum,
+ ref: GLint,
+ mask: GLuint,
+): void
+export declare function stencilMask(gl: WebGLRenderingContext, mask: GLuint): void
+export declare function stencilMaskSeparate(gl: WebGLRenderingContext, face: GLenum, mask: GLuint): void
+export declare function stencilOp(gl: WebGLRenderingContext, fail: GLenum, zfail: GLenum, zpass: GLenum): void
+export declare function stencilOpSeparate(
+ gl: WebGLRenderingContext,
+ face: GLenum,
+ fail: GLenum,
+ zfail: GLenum,
+ zpass: GLenum,
+): void
+
+export declare function texImage2D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ internalformat: GLenum,
+ format: GLenum,
+ typ: GLenum,
+ image: ImageData,
+): void
+
+export declare function texParameterf(gl: WebGLRenderingContext, target: GLenum, pname: GLenum, param: GLfloat): void
+export declare function texParameteri(gl: WebGLRenderingContext, target: GLenum, pname: GLenum, param: GLint): void
+
+export declare function texSubImage2D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ format: GLenum,
+ typ: GLenum,
+ pixels: ImageData,
+): void
+
+export declare function uniform1f(gl: WebGLRenderingContext, location: WebGLUniformLocation, x: GLfloat): void
+export declare function uniform1fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v: StaticArray /*Float32Array*/,
+): void
+
+export declare function uniform1i(gl: WebGLRenderingContext, location: WebGLUniformLocation, x: GLint): void
+export declare function uniform1iv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v: StaticArray /*Int32Array*/,
+): void
+
+export declare function uniform2f(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ x: GLfloat,
+ y: GLfloat,
+): void
+export declare function uniform2fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v: StaticArray /*Float32Array*/,
+): void
+
+export declare function uniform2i(gl: WebGLRenderingContext, location: WebGLUniformLocation, x: GLint, y: GLint): void
+export declare function uniform2iv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v: StaticArray /*Int32Array*/,
+): void
+
+export declare function uniform3f(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ x: GLfloat,
+ y: GLfloat,
+ z: GLfloat,
+): void
+export declare function uniform3fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v: StaticArray /*Float32Array*/,
+): void
+
+export declare function uniform3i(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ x: GLint,
+ y: GLint,
+ z: GLint,
+): void
+export declare function uniform3iv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v: StaticArray /*Int32Array*/,
+): void
+
+export declare function uniform4f(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ x: GLfloat,
+ y: GLfloat,
+ z: GLfloat,
+ w: GLfloat,
+): void
+export declare function uniform4fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v: StaticArray /*JSFloat32Array*/,
+): void
+
+export declare function uniform4i(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ x: GLint,
+ y: GLint,
+ z: GLint,
+ w: GLint,
+): void
+export declare function uniform4iv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v: StaticArray /*JSInt32Array*/,
+): void
+
+export declare function uniformMatrix2fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ value: StaticArray,
+): void
+/*
+export declare function uniformMatrix2fv( gl: WebGLRenderingContext, location: WebGLUniformLocation, transpose: GLboolean,
+ value: sequence): void;
+*/
+export declare function uniformMatrix3fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ value: StaticArray,
+): void
+/*
+export declare function uniformMatrix3fv( gl: WebGLRenderingContext, location: WebGLUniformLocation, transpose: GLboolean,
+ value: sequence): void;
+*/
+export declare function validateProgram(gl: WebGLRenderingContext, program: WebGLProgram): void
+
+export declare function vertexAttrib1f(gl: WebGLRenderingContext, indx: GLuint, x: GLfloat): void
+export declare function vertexAttrib1fv(gl: WebGLRenderingContext, indx: GLuint, values: StaticArray): void
+
+export declare function vertexAttrib2f(gl: WebGLRenderingContext, indx: GLuint, x: GLfloat, y: GLfloat): void
+export declare function vertexAttrib2fv(gl: WebGLRenderingContext, indx: GLuint, values: StaticArray): void
+
+export declare function vertexAttrib3f(
+ gl: WebGLRenderingContext,
+ indx: GLuint,
+ x: GLfloat,
+ y: GLfloat,
+ z: GLfloat,
+): void
+export declare function vertexAttrib3fv(gl: WebGLRenderingContext, indx: GLuint, values: StaticArray): void
+
+export declare function vertexAttrib4f(
+ gl: WebGLRenderingContext,
+ indx: GLuint,
+ x: GLfloat,
+ y: GLfloat,
+ z: GLfloat,
+ w: GLfloat,
+): void
+export declare function vertexAttrib4fv(gl: WebGLRenderingContext, indx: GLuint, values: StaticArray): void
+
+export declare function viewport(gl: WebGLRenderingContext, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void
+
+// ... WEBGL 2 ...
+/* Buffer objects */
+export declare function copyBufferSubData(
+ gl: WebGLRenderingContext,
+ readTarget: GLenum,
+ writeTarget: GLenum,
+ readOffset: GLintptr,
+ writeOffset: GLintptr,
+ size: GLsizeiptr,
+): void
+
+// @ts-ignore
+export declare function getBufferSubData(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ srcByteOffset: GLintptr,
+ /*[AllowShared]*/ dstBuffer: ArrayBufferView,
+ dstOffset: GLuint = 0,
+ length: GLuint = 0,
+): void
+
+/* Framebuffer objects */
+export declare function blitFramebuffer(
+ gl: WebGLRenderingContext,
+ srcX0: GLint,
+ srcY0: GLint,
+ srcX1: GLint,
+ srcY1: GLint,
+ dstX0: GLint,
+ dstY0: GLint,
+ dstX1: GLint,
+ dstY1: GLint,
+ mask: GLbitfield,
+ filter: GLenum,
+): void
+export declare function framebufferTextureLayer(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ attachment: GLenum,
+ texture: WebGLTexture,
+ level: GLint,
+ layer: GLint,
+): void
+export declare function invalidateFramebuffer(gl: WebGLRenderingContext, target: GLenum, attachments: GLenum[]): void
+export declare function invalidateSubFramebuffer(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ attachments: GLenum[],
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+): void
+export declare function readBuffer(gl: WebGLRenderingContext, src: GLenum): void
+
+/* Renderbuffer objects */
+export declare function getInternalformatParameter(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ internalformat: GLenum,
+ pname: GLenum,
+): externref // any
+export declare function renderbufferStorageMultisample(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ samples: GLsizei,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+): void
+
+/* Texture objects */
+export declare function texStorage2D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ levels: GLsizei,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+): void
+export declare function texStorage3D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ levels: GLsizei,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+): void
+
+export declare function texImage3D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ internalformat: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ border: GLint,
+ format: GLenum,
+ typ: GLenum,
+ pboOffset: GLintptr,
+): void
+
+export declare function texSubImage3D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ zoffset: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ format: GLenum,
+ typ: GLenum,
+ pboOffset: GLintptr,
+): void
+
+export declare function copyTexSubImage3D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ zoffset: GLint,
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+): void
+
+export declare function compressedTexImage3D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ border: GLint,
+ imageSize: GLsizei,
+ offset: GLintptr,
+): void
+
+export declare function compressedTexSubImage3D(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ zoffset: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ format: GLenum,
+ imageSize: GLsizei,
+ offset: GLintptr,
+): void
+
+/* Programs and shaders */
+export declare function getFragDataLocation(gl: WebGLRenderingContext, program: WebGLProgram, name: DOMString): GLint
+
+/* Uniforms */
+export declare function uniform1ui(gl: WebGLRenderingContext, location: WebGLUniformLocation, v0: GLuint): void
+export declare function uniform2ui(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v0: GLuint,
+ v1: GLuint,
+): void
+export declare function uniform3ui(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v0: GLuint,
+ v1: GLuint,
+ v2: GLuint,
+): void
+export declare function uniform4ui(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ v0: GLuint,
+ v1: GLuint,
+ v2: GLuint,
+ v3: GLuint,
+): void
+
+// @ts-ignore
+export declare function uniform1uiv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ data: Uint32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+// @ts-ignore
+export declare function uniform2uiv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ data: Uint32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+// @ts-ignore
+export declare function uniform3uiv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ data: Uint32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+// @ts-ignore
+export declare function uniform4uiv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ data: Uint32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+// @ts-ignore
+export declare function uniformMatrix3x2fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+// @ts-ignore
+export declare function uniformMatrix4x2fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+
+// @ts-ignore
+export declare function uniformMatrix2x3fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+// @ts-ignore
+export declare function uniformMatrix4x3fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+
+// @ts-ignore
+export declare function uniformMatrix2x4fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+// @ts-ignore
+export declare function uniformMatrix3x4fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+): void
+
+/* Vertex attribs */
+export declare function vertexAttribI4i(
+ gl: WebGLRenderingContext,
+ index: GLuint,
+ x: GLint,
+ y: GLint,
+ z: GLint,
+ w: GLint,
+): void
+export declare function vertexAttribI4iv(gl: WebGLRenderingContext, index: GLuint, values: Int32List): void
+export declare function vertexAttribI4ui(
+ gl: WebGLRenderingContext,
+ index: GLuint,
+ x: GLuint,
+ y: GLuint,
+ z: GLuint,
+ w: GLuint,
+): void
+export declare function vertexAttribI4uiv(gl: WebGLRenderingContext, index: GLuint, values: Uint32List): void
+export declare function vertexAttribIPointer(
+ gl: WebGLRenderingContext,
+ index: GLuint,
+ size: GLint,
+ typ: GLenum,
+ stride: GLsizei,
+ offset: GLintptr,
+): void
+
+/* Writing to the drawing buffer */
+export declare function vertexAttribDivisor(gl: WebGLRenderingContext, index: GLuint, divisor: GLuint): void
+export declare function drawArraysInstanced(
+ gl: WebGLRenderingContext,
+ mode: GLenum,
+ first: GLint,
+ count: GLsizei,
+ instanceCount: GLsizei,
+): void
+export declare function drawElementsInstanced(
+ gl: WebGLRenderingContext,
+ mode: GLenum,
+ count: GLsizei,
+ typ: GLenum,
+ offset: GLintptr,
+ instanceCount: GLsizei,
+): void
+export declare function drawRangeElements(
+ gl: WebGLRenderingContext,
+ mode: GLenum,
+ start: GLuint,
+ end: GLuint,
+ count: GLsizei,
+ typ: GLenum,
+ offset: GLintptr,
+): void
+
+/* Multiple Render Targets */
+export declare function drawBuffers(gl: WebGLRenderingContext, buffers: GLenum[]): void
+
+// @ts-ignore
+export declare function clearBufferfv(
+ gl: WebGLRenderingContext,
+ buffer: GLenum,
+ drawbuffer: GLint,
+ values: Float32List,
+ srcOffset: GLuint = 0,
+): void
+// @ts-ignore
+export declare function clearBufferiv(
+ gl: WebGLRenderingContext,
+ buffer: GLenum,
+ drawbuffer: GLint,
+ values: Int32List,
+ srcOffset: GLuint = 0,
+): void
+// @ts-ignore
+export declare function clearBufferuiv(
+ gl: WebGLRenderingContext,
+ buffer: GLenum,
+ drawbuffer: GLint,
+ values: Uint32List,
+ srcOffset: GLuint = 0,
+): void
+
+export declare function clearBufferfi(
+ gl: WebGLRenderingContext,
+ buffer: GLenum,
+ drawbuffer: GLint,
+ depth: GLfloat,
+ stencil: GLint,
+): void
+
+/* Query Objects */
+export declare function createQuery(gl: WebGLRenderingContext): WebGLQuery
+export declare function deleteQuery(gl: WebGLRenderingContext, query: WebGLQuery): void
+/*[WebGLHandlesContextLoss]*/
+export declare function isQuery(gl: WebGLRenderingContext, query: WebGLQuery): GLboolean
+export declare function beginQuery(gl: WebGLRenderingContext, target: GLenum, query: WebGLQuery): void
+export declare function endQuery(gl: WebGLRenderingContext, target: GLenum): void
+export declare function getQuery(gl: WebGLRenderingContext, target: GLenum, pname: GLenum): WebGLQuery
+export declare function getQueryParameter(gl: WebGLRenderingContext, query: WebGLQuery, pname: GLenum): externref // any
+
+/* Sampler Objects */
+export declare function createSampler(gl: WebGLRenderingContext): WebGLSampler
+export declare function deleteSampler(gl: WebGLRenderingContext, sampler: WebGLSampler): void
+/*[WebGLHandlesContextLoss]*/
+export declare function isSampler(gl: WebGLRenderingContext, sampler: WebGLSampler): GLboolean
+export declare function bindSampler(gl: WebGLRenderingContext, unit: GLuint, sampler: WebGLSampler): void
+export declare function samplerParameteri(
+ gl: WebGLRenderingContext,
+ sampler: WebGLSampler,
+ pname: GLenum,
+ param: GLint,
+): void
+export declare function samplerParameterf(
+ gl: WebGLRenderingContext,
+ sampler: WebGLSampler,
+ pname: GLenum,
+ param: GLfloat,
+): void
+export declare function getSamplerParameter(gl: WebGLRenderingContext, sampler: WebGLSampler, pname: GLenum): externref // any
+
+/* Sync objects */
+export declare function fenceSync(gl: WebGLRenderingContext, condition: GLenum, flags: GLbitfield): WebGLSync
+/*[WebGLHandlesContextLoss]*/
+export declare function isSync(gl: WebGLRenderingContext, sync: WebGLSync): GLboolean
+export declare function deleteSync(gl: WebGLRenderingContext, sync: WebGLSync): void
+export declare function clientWaitSync(
+ gl: WebGLRenderingContext,
+ sync: WebGLSync,
+ flags: GLbitfield,
+ timeout: GLuint64,
+): GLenum
+export declare function waitSync(gl: WebGLRenderingContext, sync: WebGLSync, flags: GLbitfield, timeout: GLint64): void
+export declare function getSyncParameter(gl: WebGLRenderingContext, sync: WebGLSync, pname: GLenum): externref // any
+
+/* Transform Feedback */
+export declare function createTransformFeedback(gl: WebGLRenderingContext): WebGLTransformFeedback
+export declare function deleteTransformFeedback(gl: WebGLRenderingContext, tf: WebGLTransformFeedback): void
+/*[WebGLHandlesContextLoss]*/
+export declare function isTransformFeedback(gl: WebGLRenderingContext, tf: WebGLTransformFeedback): GLboolean
+export declare function bindTransformFeedback(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ tf: WebGLTransformFeedback,
+): void
+export declare function beginTransformFeedback(gl: WebGLRenderingContext, primitiveMode: GLenum): void
+export declare function endTransformFeedback(gl: WebGLRenderingContext): void
+export declare function transformFeedbackVaryings(
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ varyings: DOMString[],
+ bufferMode: GLenum,
+): void
+// export declare function getTransformFeedbackVarying(
+// gl: WebGLRenderingContext,
+// program: WebGLProgram,
+// index: GLuint,
+// ): WebGLActiveInfo
+export declare function pauseTransformFeedback(gl: WebGLRenderingContext): void
+export declare function resumeTransformFeedback(gl: WebGLRenderingContext): void
+
+/* Uniform Buffer Objects and Transform Feedback Buffers */
+export declare function bindBufferBase(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ index: GLuint,
+ buffer: WebGLBuffer,
+): void
+export declare function bindBufferRange(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ index: GLuint,
+ buffer: WebGLBuffer,
+ offset: GLintptr,
+ size: GLsizeiptr,
+): void
+export declare function getIndexedParameter(gl: WebGLRenderingContext, target: GLenum, index: GLuint): externref // any
+export declare function getUniformIndices(
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ uniformNames: DOMString[],
+): GLuint[]
+export declare function getActiveUniforms(
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ uniformIndices: GLuint[],
+ pname: GLenum,
+): externref // any
+export declare function getUniformBlockIndex(
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ uniformBlockName: DOMString,
+): GLuint
+export declare function getActiveUniformBlockParameter(
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ uniformBlockIndex: GLuint,
+ pname: GLenum,
+): externref // any
+export declare function getActiveUniformBlockName(
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ uniformBlockIndex: GLuint,
+): DOMString
+export declare function uniformBlockBinding(
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ uniformBlockIndex: GLuint,
+ uniformBlockBinding: GLuint,
+): void
+
+/* Vertex Array Objects */
+export declare function createVertexArray(gl: WebGLRenderingContext): WebGLVertexArrayObject
+export declare function deleteVertexArray(gl: WebGLRenderingContext, vertexArray: WebGLVertexArrayObject): void
+/*[WebGLHandlesContextLoss]*/
+export declare function isVertexArray(gl: WebGLRenderingContext, vertexArray: WebGLVertexArrayObject): GLboolean
+export declare function bindVertexArray(gl: WebGLRenderingContext, array: WebGLVertexArrayObject): void
+
+// @final
+// @unmanaged
+export class WebGLRenderingContext extends Object {
+ // @inline
+ constructor(public canvas: HTMLCanvasElement) {
+ super()
+ }
+
+ /*
+ @inline get ptr(): usize {
+ return changetype(this);
+ }
+ */
+
+ @inline get DEPTH_BUFFER_BIT(): GLenum {
+ return DEPTH_BUFFER_BIT
+ }
+
+ @inline get STENCIL_BUFFER_BIT(): GLenum {
+ return STENCIL_BUFFER_BIT
+ }
+
+ @inline get COLOR_BUFFER_BIT(): GLenum {
+ return COLOR_BUFFER_BIT
+ }
+
+ @inline get POINTS(): GLenum {
+ return POINTS
+ }
+
+ @inline get LINES(): GLenum {
+ return LINES
+ }
+
+ @inline get LINE_LOOP(): GLenum {
+ return LINE_LOOP
+ }
+
+ @inline get LINE_STRIP(): GLenum {
+ return LINE_STRIP
+ }
+
+ @inline get TRIANGLES(): GLenum {
+ return TRIANGLES
+ }
+
+ @inline get TRIANGLE_STRIP(): GLenum {
+ return TRIANGLE_STRIP
+ }
+
+ @inline get TRIANGLE_FAN(): GLenum {
+ return TRIANGLE_FAN
+ }
+
+ @inline get ZERO(): GLenum {
+ return ZERO
+ }
+
+ @inline get ONE(): GLenum {
+ return ONE
+ }
+
+ @inline get SRC_COLOR(): GLenum {
+ return SRC_COLOR
+ }
+
+ @inline get ONE_MINUS_SRC_COLOR(): GLenum {
+ return ONE_MINUS_SRC_COLOR
+ }
+
+ @inline get SRC_ALPHA(): GLenum {
+ return SRC_ALPHA
+ }
+
+ @inline get ONE_MINUS_SRC_ALPHA(): GLenum {
+ return ONE_MINUS_SRC_ALPHA
+ }
+
+ @inline get DST_ALPHA(): GLenum {
+ return DST_ALPHA
+ }
+
+ @inline get ONE_MINUS_DST_ALPHA(): GLenum {
+ return ONE_MINUS_DST_ALPHA
+ }
+
+ @inline get DST_COLOR(): GLenum {
+ return DST_COLOR
+ }
+
+ @inline get ONE_MINUS_DST_COLOR(): GLenum {
+ return ONE_MINUS_DST_COLOR
+ }
+
+ @inline get SRC_ALPHA_SATURATE(): GLenum {
+ return SRC_ALPHA_SATURATE
+ }
+
+ @inline get FUNC_ADD(): GLenum {
+ return FUNC_ADD
+ }
+
+ @inline get BLEND_EQUATION(): GLenum {
+ return BLEND_EQUATION
+ }
+
+ @inline get BLEND_EQUATION_RGB(): GLenum {
+ return BLEND_EQUATION_RGB
+ }
+
+ @inline get BLEND_EQUATION_ALPHA(): GLenum {
+ return BLEND_EQUATION_ALPHA
+ }
+
+ @inline get FUNC_SUBTRACT(): GLenum {
+ return FUNC_SUBTRACT
+ }
+
+ @inline get FUNC_REVERSE_SUBTRACT(): GLenum {
+ return FUNC_REVERSE_SUBTRACT
+ }
+
+ @inline get BLEND_DST_RGB(): GLenum {
+ return BLEND_DST_RGB
+ }
+
+ @inline get BLEND_SRC_RGB(): GLenum {
+ return BLEND_SRC_RGB
+ }
+
+ @inline get BLEND_DST_ALPHA(): GLenum {
+ return BLEND_DST_ALPHA
+ }
+
+ @inline get BLEND_SRC_ALPHA(): GLenum {
+ return BLEND_SRC_ALPHA
+ }
+
+ @inline get CONSTANT_COLOR(): GLenum {
+ return CONSTANT_COLOR
+ }
+
+ @inline get ONE_MINUS_CONSTANT_COLOR(): GLenum {
+ return ONE_MINUS_CONSTANT_COLOR
+ }
+
+ @inline get CONSTANT_ALPHA(): GLenum {
+ return CONSTANT_ALPHA
+ }
+
+ @inline get ONE_MINUS_CONSTANT_ALPHA(): GLenum {
+ return ONE_MINUS_CONSTANT_ALPHA
+ }
+
+ @inline get BLEND_COLOR(): GLenum {
+ return BLEND_COLOR
+ }
+
+ @inline get ARRAY_BUFFER(): GLenum {
+ return ARRAY_BUFFER
+ }
+
+ @inline get ELEMENT_ARRAY_BUFFER(): GLenum {
+ return ELEMENT_ARRAY_BUFFER
+ }
+
+ @inline get ARRAY_BUFFER_BINDING(): GLenum {
+ return ARRAY_BUFFER_BINDING
+ }
+
+ @inline get ELEMENT_ARRAY_BUFFER_BINDING(): GLenum {
+ return ELEMENT_ARRAY_BUFFER_BINDING
+ }
+
+ @inline get STREAM_DRAW(): GLenum {
+ return STREAM_DRAW
+ }
+
+ @inline get STATIC_DRAW(): GLenum {
+ return STATIC_DRAW
+ }
+
+ @inline get DYNAMIC_DRAW(): GLenum {
+ return DYNAMIC_DRAW
+ }
+
+ @inline get BUFFER_SIZE(): GLenum {
+ return BUFFER_SIZE
+ }
+
+ @inline get BUFFER_USAGE(): GLenum {
+ return BUFFER_USAGE
+ }
+
+ @inline get CURRENT_VERTEX_ATTRIB(): GLenum {
+ return CURRENT_VERTEX_ATTRIB
+ }
+
+ @inline get FRONT(): GLenum {
+ return FRONT
+ }
+
+ @inline get BACK(): GLenum {
+ return BACK
+ }
+
+ @inline get FRONT_AND_BACK(): GLenum {
+ return FRONT_AND_BACK
+ }
+
+ @inline get CULL_FACE(): GLenum {
+ return CULL_FACE
+ }
+
+ @inline get BLEND(): GLenum {
+ return BLEND
+ }
+
+ @inline get DITHER(): GLenum {
+ return DITHER
+ }
+
+ @inline get STENCIL_TEST(): GLenum {
+ return STENCIL_TEST
+ }
+
+ @inline get DEPTH_TEST(): GLenum {
+ return DEPTH_TEST
+ }
+
+ @inline get SCISSOR_TEST(): GLenum {
+ return SCISSOR_TEST
+ }
+
+ @inline get POLYGON_OFFSET_FILL(): GLenum {
+ return POLYGON_OFFSET_FILL
+ }
+
+ @inline get SAMPLE_ALPHA_TO_COVERAGE(): GLenum {
+ return SAMPLE_ALPHA_TO_COVERAGE
+ }
+
+ @inline get SAMPLE_COVERAGE(): GLenum {
+ return SAMPLE_COVERAGE
+ }
+
+ @inline get NO_ERROR(): GLenum {
+ return NO_ERROR
+ }
+
+ @inline get INVALID_ENUM(): GLenum {
+ return INVALID_ENUM
+ }
+
+ @inline get INVALID_VALUE(): GLenum {
+ return INVALID_VALUE
+ }
+
+ @inline get INVALID_OPERATION(): GLenum {
+ return INVALID_OPERATION
+ }
+
+ @inline get OUT_OF_MEMORY(): GLenum {
+ return OUT_OF_MEMORY
+ }
+
+ @inline get CW(): GLenum {
+ return CW
+ }
+
+ @inline get CCW(): GLenum {
+ return CCW
+ }
+
+ @inline get LINE_WIDTH(): GLenum {
+ return LINE_WIDTH
+ }
+
+ @inline get ALIASED_POINT_SIZE_RANGE(): GLenum {
+ return ALIASED_POINT_SIZE_RANGE
+ }
+
+ @inline get ALIASED_LINE_WIDTH_RANGE(): GLenum {
+ return ALIASED_LINE_WIDTH_RANGE
+ }
+
+ @inline get CULL_FACE_MODE(): GLenum {
+ return CULL_FACE_MODE
+ }
+
+ @inline get FRONT_FACE(): GLenum {
+ return FRONT_FACE
+ }
+
+ @inline get DEPTH_RANGE(): GLenum {
+ return DEPTH_RANGE
+ }
+
+ @inline get DEPTH_WRITEMASK(): GLenum {
+ return DEPTH_WRITEMASK
+ }
+
+ @inline get DEPTH_CLEAR_VALUE(): GLenum {
+ return DEPTH_CLEAR_VALUE
+ }
+
+ @inline get DEPTH_FUNC(): GLenum {
+ return DEPTH_FUNC
+ }
+
+ @inline get STENCIL_CLEAR_VALUE(): GLenum {
+ return STENCIL_CLEAR_VALUE
+ }
+
+ @inline get STENCIL_FUNC(): GLenum {
+ return STENCIL_FUNC
+ }
+
+ @inline get STENCIL_FAIL(): GLenum {
+ return STENCIL_FAIL
+ }
+
+ @inline get STENCIL_PASS_DEPTH_FAIL(): GLenum {
+ return STENCIL_PASS_DEPTH_FAIL
+ }
+
+ @inline get STENCIL_PASS_DEPTH_PASS(): GLenum {
+ return STENCIL_PASS_DEPTH_PASS
+ }
+
+ @inline get STENCIL_REF(): GLenum {
+ return STENCIL_REF
+ }
+
+ @inline get STENCIL_VALUE_MASK(): GLenum {
+ return STENCIL_VALUE_MASK
+ }
+
+ @inline get STENCIL_WRITEMASK(): GLenum {
+ return STENCIL_WRITEMASK
+ }
+
+ @inline get STENCIL_BACK_FUNC(): GLenum {
+ return STENCIL_BACK_FUNC
+ }
+
+ @inline get STENCIL_BACK_FAIL(): GLenum {
+ return STENCIL_BACK_FAIL
+ }
+
+ @inline get STENCIL_BACK_PASS_DEPTH_FAIL(): GLenum {
+ return STENCIL_BACK_PASS_DEPTH_FAIL
+ }
+
+ @inline get STENCIL_BACK_PASS_DEPTH_PASS(): GLenum {
+ return STENCIL_BACK_PASS_DEPTH_PASS
+ }
+
+ @inline get STENCIL_BACK_REF(): GLenum {
+ return STENCIL_BACK_REF
+ }
+
+ @inline get STENCIL_BACK_VALUE_MASK(): GLenum {
+ return STENCIL_BACK_VALUE_MASK
+ }
+
+ @inline get STENCIL_BACK_WRITEMASK(): GLenum {
+ return STENCIL_BACK_WRITEMASK
+ }
+
+ @inline get VIEWPORT(): GLenum {
+ return VIEWPORT
+ }
+
+ @inline get SCISSOR_BOX(): GLenum {
+ return SCISSOR_BOX
+ }
+
+ @inline get COLOR_CLEAR_VALUE(): GLenum {
+ return COLOR_CLEAR_VALUE
+ }
+
+ @inline get COLOR_WRITEMASK(): GLenum {
+ return COLOR_WRITEMASK
+ }
+
+ @inline get UNPACK_ALIGNMENT(): GLenum {
+ return UNPACK_ALIGNMENT
+ }
+
+ @inline get PACK_ALIGNMENT(): GLenum {
+ return PACK_ALIGNMENT
+ }
+
+ @inline get MAX_TEXTURE_SIZE(): GLenum {
+ return MAX_TEXTURE_SIZE
+ }
+
+ @inline get MAX_VIEWPORT_DIMS(): GLenum {
+ return MAX_VIEWPORT_DIMS
+ }
+
+ @inline get SUBPIXEL_BITS(): GLenum {
+ return SUBPIXEL_BITS
+ }
+
+ @inline get RED_BITS(): GLenum {
+ return RED_BITS
+ }
+
+ @inline get GREEN_BITS(): GLenum {
+ return GREEN_BITS
+ }
+
+ @inline get BLUE_BITS(): GLenum {
+ return BLUE_BITS
+ }
+
+ @inline get ALPHA_BITS(): GLenum {
+ return ALPHA_BITS
+ }
+
+ @inline get DEPTH_BITS(): GLenum {
+ return DEPTH_BITS
+ }
+
+ @inline get STENCIL_BITS(): GLenum {
+ return STENCIL_BITS
+ }
+
+ @inline get POLYGON_OFFSET_UNITS(): GLenum {
+ return POLYGON_OFFSET_UNITS
+ }
+
+ @inline get POLYGON_OFFSET_FACTOR(): GLenum {
+ return POLYGON_OFFSET_FACTOR
+ }
+
+ @inline get TEXTURE_BINDING_2D(): GLenum {
+ return TEXTURE_BINDING_2D
+ }
+
+ @inline get SAMPLE_BUFFERS(): GLenum {
+ return SAMPLE_BUFFERS
+ }
+
+ @inline get SAMPLES(): GLenum {
+ return SAMPLES
+ }
+
+ @inline get SAMPLE_COVERAGE_VALUE(): GLenum {
+ return SAMPLE_COVERAGE_VALUE
+ }
+
+ @inline get SAMPLE_COVERAGE_INVERT(): GLenum {
+ return SAMPLE_COVERAGE_INVERT
+ }
+
+ @inline get COMPRESSED_TEXTURE_FORMATS(): GLenum {
+ return COMPRESSED_TEXTURE_FORMATS
+ }
+
+ @inline get DONT_CARE(): GLenum {
+ return DONT_CARE
+ }
+
+ @inline get FASTEST(): GLenum {
+ return FASTEST
+ }
+
+ @inline get NICEST(): GLenum {
+ return NICEST
+ }
+
+ @inline get GENERATE_MIPMAP_HINT(): GLenum {
+ return GENERATE_MIPMAP_HINT
+ }
+
+ @inline get BYTE(): GLenum {
+ return BYTE
+ }
+
+ @inline get UNSIGNED_BYTE(): GLenum {
+ return UNSIGNED_BYTE
+ }
+
+ @inline get SHORT(): GLenum {
+ return SHORT
+ }
+
+ @inline get UNSIGNED_SHORT(): GLenum {
+ return UNSIGNED_SHORT
+ }
+
+ @inline get INT(): GLenum {
+ return INT
+ }
+
+ @inline get UNSIGNED_INT(): GLenum {
+ return UNSIGNED_INT
+ }
+
+ @inline get FLOAT(): GLenum {
+ return FLOAT
+ }
+
+ @inline get DEPTH_COMPONENT(): GLenum {
+ return DEPTH_COMPONENT
+ }
+
+ @inline get ALPHA(): GLenum {
+ return ALPHA
+ }
+
+ @inline get RGB(): GLenum {
+ return RGB
+ }
+
+ @inline get RGBA(): GLenum {
+ return RGBA
+ }
+
+ @inline get LUMINANCE(): GLenum {
+ return LUMINANCE
+ }
+
+ @inline get LUMINANCE_ALPHA(): GLenum {
+ return LUMINANCE_ALPHA
+ }
+
+ @inline get UNSIGNED_SHORT_4_4_4_4(): GLenum {
+ return UNSIGNED_SHORT_4_4_4_4
+ }
+
+ @inline get UNSIGNED_SHORT_5_5_5_1(): GLenum {
+ return UNSIGNED_SHORT_5_5_5_1
+ }
+
+ @inline get UNSIGNED_SHORT_5_6_5(): GLenum {
+ return UNSIGNED_SHORT_5_6_5
+ }
+
+ @inline get FRAGMENT_SHADER(): GLenum {
+ return FRAGMENT_SHADER
+ }
+
+ @inline get VERTEX_SHADER(): GLenum {
+ return VERTEX_SHADER
+ }
+
+ @inline get MAX_VERTEX_ATTRIBS(): GLenum {
+ return MAX_VERTEX_ATTRIBS
+ }
+
+ @inline get MAX_VERTEX_UNIFORM_VECTORS(): GLenum {
+ return MAX_VERTEX_UNIFORM_VECTORS
+ }
+
+ @inline get MAX_VARYING_VECTORS(): GLenum {
+ return MAX_VARYING_VECTORS
+ }
+
+ @inline get MAX_COMBINED_TEXTURE_IMAGE_UNITS(): GLenum {
+ return MAX_COMBINED_TEXTURE_IMAGE_UNITS
+ }
+
+ @inline get MAX_VERTEX_TEXTURE_IMAGE_UNITS(): GLenum {
+ return MAX_VERTEX_TEXTURE_IMAGE_UNITS
+ }
+
+ @inline get MAX_TEXTURE_IMAGE_UNITS(): GLenum {
+ return MAX_TEXTURE_IMAGE_UNITS
+ }
+
+ @inline get MAX_FRAGMENT_UNIFORM_VECTORS(): GLenum {
+ return MAX_FRAGMENT_UNIFORM_VECTORS
+ }
+
+ @inline get SHADER_TYPE(): GLenum {
+ return SHADER_TYPE
+ }
+
+ @inline get DELETE_STATUS(): GLenum {
+ return DELETE_STATUS
+ }
+
+ @inline get LINK_STATUS(): GLenum {
+ return LINK_STATUS
+ }
+
+ @inline get VALIDATE_STATUS(): GLenum {
+ return VALIDATE_STATUS
+ }
+
+ @inline get ATTACHED_SHADERS(): GLenum {
+ return ATTACHED_SHADERS
+ }
+
+ @inline get ACTIVE_UNIFORMS(): GLenum {
+ return ACTIVE_UNIFORMS
+ }
+
+ @inline get ACTIVE_ATTRIBUTES(): GLenum {
+ return ACTIVE_ATTRIBUTES
+ }
+
+ @inline get SHADING_LANGUAGE_VERSION(): GLenum {
+ return SHADING_LANGUAGE_VERSION
+ }
+
+ @inline get CURRENT_PROGRAM(): GLenum {
+ return CURRENT_PROGRAM
+ }
+
+ @inline get NEVER(): GLenum {
+ return NEVER
+ }
+
+ @inline get LESS(): GLenum {
+ return LESS
+ }
+
+ @inline get EQUAL(): GLenum {
+ return EQUAL
+ }
+
+ @inline get LEQUAL(): GLenum {
+ return LEQUAL
+ }
+
+ @inline get GREATER(): GLenum {
+ return GREATER
+ }
+
+ @inline get NOTEQUAL(): GLenum {
+ return NOTEQUAL
+ }
+
+ @inline get GEQUAL(): GLenum {
+ return GEQUAL
+ }
+
+ @inline get ALWAYS(): GLenum {
+ return ALWAYS
+ }
+
+ @inline get KEEP(): GLenum {
+ return KEEP
+ }
+
+ @inline get REPLACE(): GLenum {
+ return REPLACE
+ }
+
+ @inline get INCR(): GLenum {
+ return INCR
+ }
+
+ @inline get DECR(): GLenum {
+ return DECR
+ }
+
+ @inline get INVERT(): GLenum {
+ return INVERT
+ }
+
+ @inline get INCR_WRAP(): GLenum {
+ return INCR_WRAP
+ }
+
+ @inline get DECR_WRAP(): GLenum {
+ return DECR_WRAP
+ }
+
+ @inline get VENDOR(): GLenum {
+ return VENDOR
+ }
+
+ @inline get RENDERER(): GLenum {
+ return RENDERER
+ }
+
+ @inline get VERSION(): GLenum {
+ return VERSION
+ }
+
+ @inline get NEAREST(): GLenum {
+ return NEAREST
+ }
+
+ @inline get LINEAR(): GLenum {
+ return LINEAR
+ }
+
+ @inline get NEAREST_MIPMAP_NEAREST(): GLenum {
+ return NEAREST_MIPMAP_NEAREST
+ }
+
+ @inline get LINEAR_MIPMAP_NEAREST(): GLenum {
+ return LINEAR_MIPMAP_NEAREST
+ }
+
+ @inline get NEAREST_MIPMAP_LINEAR(): GLenum {
+ return NEAREST_MIPMAP_LINEAR
+ }
+
+ @inline get LINEAR_MIPMAP_LINEAR(): GLenum {
+ return LINEAR_MIPMAP_LINEAR
+ }
+
+ @inline get TEXTURE_MAG_FILTER(): GLenum {
+ return TEXTURE_MAG_FILTER
+ }
+
+ @inline get TEXTURE_MIN_FILTER(): GLenum {
+ return TEXTURE_MIN_FILTER
+ }
+
+ @inline get TEXTURE_WRAP_S(): GLenum {
+ return LINEAR
+ }
+
+ @inline get TEXTURE_WRAP_T(): GLenum {
+ return TEXTURE_WRAP_T
+ }
+
+ @inline get TEXTURE_2D(): GLenum {
+ return TEXTURE_2D
+ }
+
+ @inline get TEXTURE(): GLenum {
+ return TEXTURE
+ }
+
+ @inline get TEXTURE_CUBE_MAP(): GLenum {
+ return TEXTURE_CUBE_MAP
+ }
+
+ @inline get TEXTURE_BINDING_CUBE_MAP(): GLenum {
+ return TEXTURE_BINDING_CUBE_MAP
+ }
+
+ @inline get TEXTURE_CUBE_MAP_POSITIVE_X(): GLenum {
+ return TEXTURE_CUBE_MAP_POSITIVE_X
+ }
+
+ @inline get TEXTURE_CUBE_MAP_NEGATIVE_X(): GLenum {
+ return TEXTURE_CUBE_MAP_NEGATIVE_X
+ }
+
+ @inline get TEXTURE_CUBE_MAP_POSITIVE_Y(): GLenum {
+ return TEXTURE_CUBE_MAP_POSITIVE_Y
+ }
+
+ @inline get TEXTURE_CUBE_MAP_NEGATIVE_Y(): GLenum {
+ return TEXTURE_CUBE_MAP_NEGATIVE_Y
+ }
+
+ @inline get TEXTURE_CUBE_MAP_POSITIVE_Z(): GLenum {
+ return TEXTURE_CUBE_MAP_POSITIVE_Z
+ }
+
+ @inline get TEXTURE_CUBE_MAP_NEGATIVE_Z(): GLenum {
+ return TEXTURE_CUBE_MAP_NEGATIVE_Z
+ }
+
+ @inline get MAX_CUBE_MAP_TEXTURE_SIZE(): GLenum {
+ return MAX_CUBE_MAP_TEXTURE_SIZE
+ }
+
+ @inline get TEXTURE0(): GLenum {
+ return TEXTURE0
+ }
+ @inline get TEXTURE1(): GLenum {
+ return TEXTURE1
+ }
+ @inline get TEXTURE2(): GLenum {
+ return TEXTURE2
+ }
+ @inline get TEXTURE3(): GLenum {
+ return TEXTURE3
+ }
+ @inline get TEXTURE4(): GLenum {
+ return TEXTURE4
+ }
+ @inline get TEXTURE5(): GLenum {
+ return TEXTURE5
+ }
+ @inline get TEXTURE6(): GLenum {
+ return TEXTURE6
+ }
+ @inline get TEXTURE7(): GLenum {
+ return TEXTURE7
+ }
+ @inline get TEXTURE8(): GLenum {
+ return TEXTURE8
+ }
+ @inline get TEXTURE9(): GLenum {
+ return TEXTURE9
+ }
+ //---
+
+ @inline get TEXTURE10(): GLenum {
+ return TEXTURE10
+ }
+ @inline get TEXTURE11(): GLenum {
+ return TEXTURE11
+ }
+ @inline get TEXTURE12(): GLenum {
+ return TEXTURE12
+ }
+ @inline get TEXTURE13(): GLenum {
+ return TEXTURE13
+ }
+ @inline get TEXTURE14(): GLenum {
+ return TEXTURE14
+ }
+ @inline get TEXTURE15(): GLenum {
+ return TEXTURE15
+ }
+ @inline get TEXTURE16(): GLenum {
+ return TEXTURE16
+ }
+ @inline get TEXTURE17(): GLenum {
+ return TEXTURE17
+ }
+ @inline get TEXTURE18(): GLenum {
+ return TEXTURE18
+ }
+ @inline get TEXTURE19(): GLenum {
+ return TEXTURE19
+ }
+ // --
+ @inline get TEXTURE20(): GLenum {
+ return TEXTURE20
+ }
+ @inline get TEXTURE21(): GLenum {
+ return TEXTURE21
+ }
+ @inline get TEXTURE22(): GLenum {
+ return TEXTURE22
+ }
+ @inline get TEXTURE23(): GLenum {
+ return TEXTURE23
+ }
+ @inline get TEXTURE24(): GLenum {
+ return TEXTURE24
+ }
+ @inline get TEXTURE25(): GLenum {
+ return TEXTURE25
+ }
+ @inline get TEXTURE26(): GLenum {
+ return TEXTURE26
+ }
+ @inline get TEXTURE27(): GLenum {
+ return TEXTURE27
+ }
+ @inline get TEXTURE28(): GLenum {
+ return TEXTURE28
+ }
+ @inline get TEXTURE29(): GLenum {
+ return TEXTURE29
+ }
+
+ @inline get TEXTURE30(): GLenum {
+ return TEXTURE30
+ }
+ @inline get TEXTURE31(): GLenum {
+ return TEXTURE31
+ }
+
+ @inline get ACTIVE_TEXTURE(): GLenum {
+ return ACTIVE_TEXTURE
+ }
+
+ @inline get REPEAT(): GLenum {
+ return REPEAT
+ }
+
+ @inline get CLAMP_TO_EDGE(): GLenum {
+ return CLAMP_TO_EDGE
+ }
+
+ @inline get MIRRORED_REPEAT(): GLenum {
+ return MIRRORED_REPEAT
+ }
+
+ @inline get FLOAT_VEC2(): GLenum {
+ return FLOAT_VEC2
+ }
+
+ @inline get FLOAT_VEC3(): GLenum {
+ return FLOAT_VEC3
+ }
+
+ @inline get FLOAT_VEC4(): GLenum {
+ return FLOAT_VEC4
+ }
+
+ @inline get INT_VEC2(): GLenum {
+ return INT_VEC2
+ }
+
+ @inline get INT_VEC3(): GLenum {
+ return INT_VEC3
+ }
+
+ @inline get INT_VEC4(): GLenum {
+ return INT_VEC4
+ }
+
+ @inline get BOOL(): GLenum {
+ return BOOL
+ }
+
+ @inline get BOOL_VEC2(): GLenum {
+ return BOOL_VEC2
+ }
+
+ @inline get BOOL_VEC3(): GLenum {
+ return REPEAT
+ }
+
+ @inline get BOOL_VEC4(): GLenum {
+ return BOOL_VEC4
+ }
+
+ @inline get FLOAT_MAT2(): GLenum {
+ return FLOAT_MAT2
+ }
+
+ @inline get FLOAT_MAT3(): GLenum {
+ return FLOAT_MAT3
+ }
+
+ @inline get FLOAT_MAT4(): GLenum {
+ return FLOAT_MAT4
+ }
+
+ @inline get SAMPLER_2D(): GLenum {
+ return SAMPLER_2D
+ }
+
+ @inline get SAMPLER_CUBE(): GLenum {
+ return SAMPLER_CUBE
+ }
+
+ @inline get VERTEX_ATTRIB_ARRAY_ENABLED(): GLenum {
+ return VERTEX_ATTRIB_ARRAY_ENABLED
+ }
+
+ @inline get VERTEX_ATTRIB_ARRAY_SIZE(): GLenum {
+ return VERTEX_ATTRIB_ARRAY_SIZE
+ }
+
+ @inline get VERTEX_ATTRIB_ARRAY_STRIDE(): GLenum {
+ return VERTEX_ATTRIB_ARRAY_STRIDE
+ }
+
+ @inline get VERTEX_ATTRIB_ARRAY_TYPE(): GLenum {
+ return VERTEX_ATTRIB_ARRAY_TYPE
+ }
+
+ @inline get VERTEX_ATTRIB_ARRAY_NORMALIZED(): GLenum {
+ return VERTEX_ATTRIB_ARRAY_NORMALIZED
+ }
+
+ @inline get VERTEX_ATTRIB_ARRAY_POINTER(): GLenum {
+ return VERTEX_ATTRIB_ARRAY_POINTER
+ }
+
+ @inline get VERTEX_ATTRIB_ARRAY_BUFFER_BINDING(): GLenum {
+ return VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+ }
+
+ @inline get COMPILE_STATUS(): GLenum {
+ return COMPILE_STATUS
+ }
+
+ @inline get LOW_FLOAT(): GLenum {
+ return LOW_FLOAT
+ }
+
+ @inline get MEDIUM_FLOAT(): GLenum {
+ return MEDIUM_FLOAT
+ }
+
+ @inline get HIGH_FLOAT(): GLenum {
+ return HIGH_FLOAT
+ }
+
+ @inline get LOW_INT(): GLenum {
+ return LOW_INT
+ }
+
+ @inline get MEDIUM_INT(): GLenum {
+ return MEDIUM_INT
+ }
+
+ @inline get HIGH_INT(): GLenum {
+ return HIGH_INT
+ }
+
+ @inline get FRAMEBUFFER(): GLenum {
+ return FRAMEBUFFER
+ }
+
+ @inline get RENDERBUFFER(): GLenum {
+ return RENDERBUFFER
+ }
+
+ @inline get RGBA4(): GLenum {
+ return RGBA4
+ }
+
+ @inline get RGB5_A1(): GLenum {
+ return RGB5_A1
+ }
+
+ @inline get RGB565(): GLenum {
+ return RGB565
+ }
+
+ @inline get DEPTH_COMPONENT16(): GLenum {
+ return DEPTH_COMPONENT16
+ }
+
+ @inline get STENCIL_INDEX(): GLenum {
+ return STENCIL_INDEX
+ }
+
+ @inline get STENCIL_INDEX8(): GLenum {
+ return STENCIL_INDEX8
+ }
+
+ @inline get DEPTH_STENCIL(): GLenum {
+ return DEPTH_STENCIL
+ }
+
+ @inline get RENDERBUFFER_WIDTH(): GLenum {
+ return RENDERBUFFER_WIDTH
+ }
+
+ @inline get RENDERBUFFER_HEIGHT(): GLenum {
+ return RENDERBUFFER_HEIGHT
+ }
+
+ @inline get RENDERBUFFER_INTERNAL_FORMAT(): GLenum {
+ return RENDERBUFFER_INTERNAL_FORMAT
+ }
+
+ @inline get RENDERBUFFER_RED_SIZE(): GLenum {
+ return RENDERBUFFER_RED_SIZE
+ }
+
+ @inline get RENDERBUFFER_GREEN_SIZE(): GLenum {
+ return RENDERBUFFER_GREEN_SIZE
+ }
+
+ @inline get RENDERBUFFER_BLUE_SIZE(): GLenum {
+ return RENDERBUFFER_BLUE_SIZE
+ }
+
+ @inline get RENDERBUFFER_ALPHA_SIZE(): GLenum {
+ return RENDERBUFFER_ALPHA_SIZE
+ }
+
+ @inline get RENDERBUFFER_DEPTH_SIZE(): GLenum {
+ return RENDERBUFFER_DEPTH_SIZE
+ }
+
+ @inline get RENDERBUFFER_STENCIL_SIZE(): GLenum {
+ return RENDERBUFFER_STENCIL_SIZE
+ }
+
+ @inline get FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE(): GLenum {
+ return FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+ }
+
+ @inline get FRAMEBUFFER_ATTACHMENT_OBJECT_NAME(): GLenum {
+ return FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+ }
+
+ @inline get FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL(): GLenum {
+ return FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+ }
+
+ @inline get FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE(): GLenum {
+ return FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+ }
+
+ @inline get COLOR_ATTACHMENT0(): GLenum {
+ return COLOR_ATTACHMENT0
+ }
+
+ @inline get DEPTH_ATTACHMENT(): GLenum {
+ return DEPTH_ATTACHMENT
+ }
+
+ @inline get STENCIL_ATTACHMENT(): GLenum {
+ return STENCIL_ATTACHMENT
+ }
+
+ @inline get DEPTH_STENCIL_ATTACHMENT(): GLenum {
+ return DEPTH_STENCIL_ATTACHMENT
+ }
+
+ @inline get NONE(): GLenum {
+ return NONE
+ }
+
+ @inline get FRAMEBUFFER_COMPLETE(): GLenum {
+ return FRAMEBUFFER_COMPLETE
+ }
+
+ @inline get FRAMEBUFFER_INCOMPLETE_ATTACHMENT(): GLenum {
+ return FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+ }
+
+ @inline get FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT(): GLenum {
+ return FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+ }
+
+ @inline get FRAMEBUFFER_INCOMPLETE_DIMENSIONS(): GLenum {
+ return FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+ }
+
+ @inline get FRAMEBUFFER_UNSUPPORTED(): GLenum {
+ return FRAMEBUFFER_UNSUPPORTED
+ }
+
+ @inline get FRAMEBUFFER_BINDING(): GLenum {
+ return FRAMEBUFFER_BINDING
+ }
+
+ @inline get RENDERBUFFER_BINDING(): GLenum {
+ return RENDERBUFFER_BINDING
+ }
+
+ @inline get MAX_RENDERBUFFER_SIZE(): GLenum {
+ return MAX_RENDERBUFFER_SIZE
+ }
+
+ @inline get INVALID_FRAMEBUFFER_OPERATION(): GLenum {
+ return INVALID_FRAMEBUFFER_OPERATION
+ }
+
+ @inline get UNPACK_FLIP_Y_WEBGL(): GLenum {
+ return UNPACK_FLIP_Y_WEBGL
+ }
+
+ @inline get UNPACK_PREMULTIPLY_ALPHA_WEBGL(): GLenum {
+ return UNPACK_PREMULTIPLY_ALPHA_WEBGL
+ }
+
+ @inline get CONTEXT_LOST_WEBGL(): GLenum {
+ return CONTEXT_LOST_WEBGL
+ }
+
+ @inline get UNPACK_COLORSPACE_CONVERSION_WEBGL(): GLenum {
+ return UNPACK_COLORSPACE_CONVERSION_WEBGL
+ }
+
+ @inline get BROWSER_DEFAULT_WEBGL(): GLenum {
+ return BROWSER_DEFAULT_WEBGL
+ }
+
+ get drawingBufferWidth(): GLsizei {
+ return getDrawingBufferWidth(this)
+ }
+
+ get drawingBufferHeight(): GLsizei {
+ return getDrawingBufferHeight(this)
+ }
+
+ @inline getContextAttributes(): WebGLContextAttributes {
+ return getContextAttributes(this)
+ }
+
+ @inline isContextLost(): bool {
+ return isContextLost(this)
+ }
+
+ @inline getSupportedExtensions(): string[] {
+ return getSupportedExtensions(this)
+ }
+
+ private __extensions: Map = new Map()
+
+ /**
+ * Get a canvas rendering context. Given a particular `type` string, a `T`
+ * generic type arg of the same name must be provided or a compile error
+ * will happen. The generic type arg is required so that the return type can
+ * be known in AssemblyScript. For example, the following will work, and the return
+ * type will be statically known and usable:
+ *
+ * ```ts
+ * const ext = gl.getExtension('ANGLE_instanced_arrays')
+ * ```
+ *
+ * The following will cause a compile error due to the mismatch between `T` and `type`.
+ *
+ * ```ts
+ * const ext = gl.getExtension('EXT_blend_minmax')
+ * ```
+ */
+ // TODO, Once we have `Foo extends Bar` type conditions, we can get rid of
+ // the generic arg and base return types off string types.
+ @inline getExtension(type: string): T {
+ // != or !== ?
+ // Can we make this a compile-time check somehow?
+ if (nameof() !== type)
+ throw new Error('Invalid context `type` string or `T` type provided, or mismatch between `type` and `T`.')
+
+ if (this.__extensions.has(type)) return this.__extensions.get(type) as T
+
+ const obj = instantiate()
+
+ let typeNum: i32 = -1
+
+ // == or === ?
+ if (obj instanceof ANGLE_instanced_arrays) typeNum = 0
+ else if (obj instanceof EXT_blend_minmax) typeNum = 1
+ // TODO else if (type == '...') typeNum = ...
+ else ERROR('This should not be possible.')
+
+ getExtension(this, obj, typeNum)
+ this.__extensions.set(type, obj)
+
+ return obj
+ }
+
+ @inline activeTexture(texture: GLenum): void {
+ activeTexture(this, texture)
+ }
+
+ @inline attachShader(program: WebGLProgram, shader: WebGLShader): void {
+ attachShader(this, program, shader)
+ }
+
+ // @inline bindAttribLocation(gl: WebGLRenderingContext, program: WebGLProgram, index: GLuint, name: string): void;
+ @inline bindBuffer(target: GLenum, buffer: WebGLBuffer): void {
+ bindBuffer(this, target, buffer)
+ }
+ @inline bindFramebuffer(target: GLenum, framebuffer: WebGLFramebuffer): void {
+ bindFramebuffer(this, target, framebuffer)
+ }
+ @inline bindRenderbuffer(target: GLenum, renderbuffer: WebGLRenderbuffer): void {
+ bindRenderbuffer(this, target, renderbuffer)
+ }
+ @inline bindTexture(target: GLenum, texture: WebGLTexture): void {
+ bindTexture(this, target, texture)
+ }
+ @inline blendColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void {
+ blendColor(this, red, green, blue, alpha)
+ }
+ @inline blendEquation(mode: GLenum): void {
+ blendEquation(this, mode)
+ }
+ @inline blendEquationSeparate(modeRGB: GLenum, modeAlpha: GLenum): void {
+ blendEquationSeparate(this, modeRGB, modeAlpha)
+ }
+ @inline blendFunc(sfactor: GLenum, dfactor: GLenum): void {
+ blendFunc(this, sfactor, dfactor)
+ }
+ @inline blendFuncSeparate(srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void {
+ blendFuncSeparate(this, srcRGB, dstRGB, srcAlpha, dstAlpha)
+ }
+ // TODO use TypedArray instead of StaticArray to match JS/TS APIs after this is fixed: https://github.com/AssemblyScript/assemblyscript/issues/2038
+ // TODO make implement the other signatures to match JS/TS. For now we just accept TypedArrays.
+ @inline bufferData(target: GLenum, data: StaticArray, usage: GLenum): void {
+ bufferData(this, WebGLDataBufferTypes.ArrayBufferView, target, data, usage)
+ }
+ @inline bufferSubData(target: GLenum, offset: GLintptr, data: Array): void {
+ bufferSubData(this, target, offset, data)
+ }
+
+ @inline checkFramebufferStatus(target: GLenum): GLenum {
+ return checkFramebufferStatus(this, target)
+ }
+ @inline clear(mask: GLbitfield): void {
+ clear(this, mask)
+ }
+
+ @inline clearColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void {
+ clearColor(this, red, green, blue, alpha)
+ }
+ @inline clearDepth(depth: GLclampf): void {
+ clearDepth(this, depth)
+ }
+ @inline clearStencil(s: GLint): void {
+ clearStencil(this, s)
+ }
+ @inline colorMask(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean): void {
+ colorMask(this, red, green, blue, alpha)
+ }
+ @inline compileShader(shader: WebGLShader): void {
+ compileShader(this, shader)
+ }
+
+ @inline compressedTexImage2D(
+ target: GLenum,
+ level: GLint,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+ border: GLint,
+ data: ArrayBufferView,
+ ): void {
+ compressedTexImage2D(this, target, level, internalformat, width, height, border, data)
+ }
+ @inline compressedTexSubImage2D(
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ format: GLenum,
+ data: ArrayBufferView,
+ ): void {
+ compressedTexSubImage2D(this, target, level, xoffset, yoffset, width, height, format, data)
+ }
+
+ @inline copyTexImage2D(
+ target: GLenum,
+ level: GLint,
+ internalformat: GLenum,
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ border: GLint,
+ ): void {
+ copyTexImage2D(this, target, level, internalformat, x, y, width, height, border)
+ }
+ @inline copyTexSubImage2D(
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ ): void {
+ copyTexSubImage2D(this, target, level, xoffset, yoffset, x, y, width, height)
+ }
+
+ @inline createBuffer(): WebGLBuffer {
+ const result = new WebGLBuffer()
+ createBuffer(this, result)
+ return result
+ }
+
+ @inline createFramebuffer(): WebGLFramebuffer {
+ return createFramebuffer(this)
+ }
+
+ @inline createProgram(): WebGLProgram {
+ const result = new WebGLProgram()
+ createProgram(this, result)
+ return result
+ }
+ @inline createRenderbuffer(): WebGLRenderbuffer {
+ return createRenderbuffer(this)
+ }
+ @inline createShader(type: GLenum): WebGLShader {
+ const result = new WebGLShader()
+ createShader(this, result, type)
+ return result
+ }
+
+ @inline createTexture(): WebGLTexture {
+ return createTexture(this)
+ }
+
+ @inline cullFace(mode: GLenum): void {
+ cullFace(this, mode)
+ }
+
+ @inline deleteBuffer(buffer: WebGLBuffer): void {
+ deleteBuffer(this, buffer)
+ }
+
+ @inline deleteFramebuffer(framebuffer: WebGLFramebuffer): void {
+ deleteFramebuffer(this, framebuffer)
+ }
+
+ @inline deleteProgram(program: WebGLProgram): void {
+ deleteProgram(this, program)
+ }
+
+ @inline deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void {
+ deleteRenderbuffer(this, renderbuffer)
+ }
+ @inline deleteShader(shader: WebGLShader): void {
+ deleteShader(this, shader)
+ }
+ @inline deleteTexture(texture: WebGLTexture): void {
+ deleteTexture(this, texture)
+ }
+
+ @inline depthFunc(func: GLenum): void {
+ depthFunc(this, func)
+ }
+ @inline depthMask(flag: GLboolean): void {
+ depthMask(this, flag)
+ }
+ @inline depthRange(zNear: GLclampf, zFar: GLclampf): void {
+ depthRange(this, zNear, zFar)
+ }
+
+ @inline detachShader(program: WebGLProgram, shader: WebGLShader): void {
+ detachShader(this, program, shader)
+ }
+ @inline disable(cap: GLenum): void {
+ disable(this, cap)
+ }
+ @inline disableVertexAttribArray(index: GLuint): void {
+ disableVertexAttribArray(this, index)
+ }
+ @inline drawArrays(mode: GLenum, first: GLint, count: GLsizei): void {
+ drawArrays(this, mode, first, count)
+ }
+ @inline drawElements(mode: GLenum, count: GLsizei, typ: GLenum, offset: GLintptr): void {
+ drawElements(this, mode, count, typ, offset)
+ }
+
+ @inline enable(capability: GLenum): void {
+ enable(this, capability)
+ }
+
+ @inline enableVertexAttribArray(index: GLuint): void {
+ enableVertexAttribArray(this, index)
+ }
+ @inline finish(): void {
+ finish(this)
+ }
+ @inline flush(): void {
+ flush(this)
+ }
+ @inline framebufferRenderbuffer(
+ target: GLenum,
+ attachment: GLenum,
+ renderbuffertarget: GLenum,
+ renderbuffer: WebGLRenderbuffer,
+ ): void {
+ framebufferRenderbuffer(this, target, attachment, renderbuffertarget, renderbuffer)
+ }
+ @inline framebufferTexture2D(
+ target: GLenum,
+ attachment: GLenum,
+ textarget: GLenum,
+ texture: WebGLTexture,
+ level: GLint,
+ ): void {
+ framebufferTexture2D(this, target, attachment, textarget, texture, level)
+ }
+ @inline frontFace(mode: GLenum): void {
+ frontFace(this, mode)
+ }
+
+ @inline generateMipmap(target: GLenum): void {
+ generateMipmap(this, target)
+ }
+
+ // @inline getActiveAttrib(program: WebGLProgram, index: GLuint): WebGLActiveInfo {
+ // return getActiveAttrib(this, program, index)
+ // }
+ // @inline getActiveUniform(program: WebGLProgram, index: GLuint): WebGLActiveInfo {
+ // return getActiveUniform(this, program, index)
+ // }
+ // @inline getAttachedShaders(program: WebGLProgram): sequence {
+ // return getAttachedShaders(this, program)
+ // }
+
+ @inline getAttribLocation(program: WebGLProgram, name: string): GLint {
+ return getAttribLocation(this, program, name)
+ }
+
+ @inline getBufferParameter(target: GLenum, pname: GLenum): externref {
+ return getBufferParameter(this, target, pname)
+ }
+ @inline getParameter(pname: GLenum): externref {
+ return getParameter(this, pname)
+ }
+
+ @inline getError(): GLenum {
+ return getError(this)
+ }
+
+ @inline getFramebufferAttachmentParameter(target: GLenum, attachment: GLenum, pname: GLenum): externref {
+ return getFramebufferAttachmentParameter(this, target, attachment, pname)
+ }
+ @inline getProgramParameter(program: WebGLProgram, pname: GLenum): bool {
+ return getProgramParameter(this, program, pname)
+ }
+ @inline getProgramInfoLog(program: WebGLProgram): DOMString {
+ return getProgramInfoLog(this, program)
+ }
+ @inline getRenderbufferParameter(target: GLenum, pname: GLenum): externref {
+ return getRenderbufferParameter(this, target, pname)
+ }
+ @inline getShaderParameter(shader: WebGLShader, pname: GLenum): bool {
+ return getShaderParameter(this, shader, pname)
+ }
+ // @inline getShaderPrecisionFormat(shadertype: GLenum, precisiontype: GLenum): WebGLShaderPrecisionFormat {
+ // return getShaderPrecisionFormat(this, shadertype, precisiontype)
+ // }
+
+ @inline getShaderInfoLog(shader: WebGLShader): DOMString {
+ return getShaderInfoLog(this, shader)
+ }
+
+ @inline getShaderSource(shader: WebGLShader): DOMString {
+ return getShaderSource(this, shader)
+ }
+
+ @inline getTexParameter(target: GLenum, pname: GLenum): externref {
+ return getTexParameter(this, target, pname)
+ }
+
+ @inline getUniform(program: WebGLProgram, location: WebGLUniformLocation): externref {
+ return getUniform(this, program, location)
+ }
+
+ @inline getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation {
+ const result = new WebGLUniformLocation()
+ getUniformLocation(this, result, program, name)
+ return result
+ }
+
+ @inline getVertexAttrib(index: GLuint, pname: GLenum): externref {
+ return getVertexAttrib(this, index, pname)
+ }
+
+ @inline getVertexAttribOffset(index: GLuint, pname: GLenum): GLsizeiptr {
+ return getVertexAttribOffset(this, index, pname)
+ }
+
+ @inline hint(target: GLenum, mode: GLenum): void {
+ hint(this, target, mode)
+ }
+
+ @inline isBuffer(buffer: WebGLBuffer): GLboolean {
+ return isBuffer(this, buffer)
+ }
+ @inline isEnabled(cap: GLenum): GLboolean {
+ return isEnabled(this, cap)
+ }
+ @inline isFramebuffer(framebuffer: WebGLFramebuffer): GLboolean {
+ return isFramebuffer(this, framebuffer)
+ }
+ @inline isProgram(program: WebGLProgram): GLboolean {
+ return isProgram(this, program)
+ }
+ @inline isRenderbuffer(renderbuffer: WebGLRenderbuffer): GLboolean {
+ return isRenderbuffer(this, renderbuffer)
+ }
+ @inline isShader(shader: WebGLShader): GLboolean {
+ return isShader(this, shader)
+ }
+ @inline isTexture(texture: WebGLTexture): GLboolean {
+ return isTexture(this, texture)
+ }
+ @inline lineWidth(width: GLfloat): void {
+ lineWidth(this, width)
+ }
+ @inline linkProgram(program: WebGLProgram): void {
+ linkProgram(this, program)
+ }
+ @inline pixelStorei(pname: GLenum, param: GLint): void {
+ pixelStorei(this, pname, param)
+ }
+ @inline polygonOffset(factor: GLfloat, units: GLfloat): void {
+ polygonOffset(this, factor, units)
+ }
+
+ @inline readPixels(
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ format: GLenum,
+ typ: GLenum,
+ pixels: ArrayBufferView,
+ ): void {
+ readPixels(this, x, y, width, height, format, typ, pixels)
+ }
+
+ @inline renderbufferStorage(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei): void {
+ renderbufferStorage(this, target, internalformat, width, height)
+ }
+ @inline sampleCoverage(value: GLclampf, invert: GLboolean): void {
+ sampleCoverage(this, value, invert)
+ }
+ @inline scissor(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void {
+ scissor(this, x, y, width, height)
+ }
+
+ @inline shaderSource(shader: WebGLShader, source: string): void {
+ shaderSource(this, shader, source)
+ }
+
+ @inline stencilFunc(func: GLenum, ref: GLint, mask: GLuint): void {
+ stencilFunc(this, func, ref, mask)
+ }
+ @inline stencilFuncSeparate(face: GLenum, func: GLenum, ref: GLint, mask: GLuint): void {
+ stencilFuncSeparate(this, face, func, ref, mask)
+ }
+ @inline stencilMask(mask: GLuint): void {
+ stencilMask(this, mask)
+ }
+ @inline stencilMaskSeparate(face: GLenum, mask: GLuint): void {
+ stencilMaskSeparate(this, face, mask)
+ }
+ @inline stencilOp(fail: GLenum, zfail: GLenum, zpass: GLenum): void {
+ stencilOp(this, fail, zfail, zpass)
+ }
+ @inline stencilOpSeparate(face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum): void {
+ stencilOpSeparate(this, face, fail, zfail, zpass)
+ }
+
+ @inline texImage2D(
+ target: GLenum,
+ level: GLint,
+ internalformat: GLenum,
+ format: GLenum,
+ typ: GLenum,
+ image: ImageData,
+ ): void {
+ texImage2D(this, target, level, internalformat, format, typ, image)
+ }
+
+ @inline texParameterf(target: GLenum, pname: GLenum, param: GLfloat): void {
+ texParameterf(this, target, pname, param)
+ }
+ @inline texParameteri(target: GLenum, pname: GLenum, param: GLint): void {
+ texParameteri(this, target, pname, param)
+ }
+
+ @inline texSubImage2D(
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ format: GLenum,
+ typ: GLenum,
+ pixels: ImageData,
+ ): void {
+ texSubImage2D(this, target, level, xoffset, yoffset, format, typ, pixels)
+ }
+
+ @inline uniform1f(location: WebGLUniformLocation, x: GLfloat): void {
+ uniform1f(this, location, x)
+ }
+
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniform1fv(location: WebGLUniformLocation, v: StaticArray): void {
+ uniform1fv(this, location, v)
+ }
+
+ @inline uniform1i(location: WebGLUniformLocation, x: GLint): void {
+ uniform1i(this, location, x)
+ }
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniform1iv(location: WebGLUniformLocation, v: StaticArray): void {
+ uniform1iv(this, location, v)
+ }
+
+ @inline uniform2f(location: WebGLUniformLocation, x: GLfloat, y: GLfloat): void {
+ uniform2f(this, location, x, y)
+ }
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniform2fv(location: WebGLUniformLocation, v: StaticArray): void {
+ uniform2fv(this, location, v)
+ }
+
+ @inline uniform2i(location: WebGLUniformLocation, x: GLint, y: GLint): void {
+ uniform2i(this, location, x, y)
+ }
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniform2iv(location: WebGLUniformLocation, v: StaticArray): void {
+ uniform2iv(this, location, v)
+ }
+
+ @inline uniform3f(location: WebGLUniformLocation, x: GLfloat, y: GLfloat, z: GLfloat): void {
+ uniform3f(this, location, x, y, z)
+ }
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniform3fv(location: WebGLUniformLocation, v: StaticArray): void {
+ uniform3fv(this, location, v)
+ }
+
+ @inline uniform3i(location: WebGLUniformLocation, x: GLint, y: GLint, z: GLint): void {
+ uniform3i(this, location, x, y, z)
+ }
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniform3iv(location: WebGLUniformLocation, v: StaticArray): void {
+ uniform3iv(this, location, v)
+ }
+
+ @inline uniform4f(location: WebGLUniformLocation, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void {
+ uniform4f(this, location, x, y, z, w)
+ }
+
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniform4fv(location: WebGLUniformLocation, v: StaticArray): void {
+ uniform4fv(this, location, v)
+ }
+
+ @inline uniform4i(location: WebGLUniformLocation, x: GLint, y: GLint, z: GLint, w: GLint): void {
+ uniform4i(this, location, x, y, z, w)
+ }
+
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniform4iv(location: WebGLUniformLocation, v: StaticArray): void {
+ uniform4iv(this, location, v)
+ }
+
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniformMatrix2fv(location: WebGLUniformLocation, transpose: GLboolean, value: StaticArray): void {
+ uniformMatrix2fv(this, location, transpose, value)
+ }
+
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniformMatrix3fv(location: WebGLUniformLocation, transpose: GLboolean, value: StaticArray): void {
+ uniformMatrix3fv(this, location, transpose, value)
+ }
+
+ // TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+ @inline uniformMatrix4fv(location: WebGLUniformLocation, transpose: GLboolean, value: StaticArray): void {
+ uniformMatrix4fv(this, location, transpose, value)
+ }
+ @inline useProgram(program: WebGLProgram): void {
+ useProgram(this, program)
+ }
+ @inline validateProgram(program: WebGLProgram): void {
+ validateProgram(this, program)
+ }
+
+ @inline vertexAttrib1f(indx: GLuint, x: GLfloat): void {
+ vertexAttrib1f(this, indx, x)
+ }
+
+ @inline vertexAttrib1fv(indx: GLuint, values: StaticArray): void {
+ vertexAttrib1fv(this, indx, values)
+ }
+
+ @inline vertexAttrib2f(indx: GLuint, x: GLfloat, y: GLfloat): void {
+ vertexAttrib2f(this, indx, x, y)
+ }
+
+ @inline vertexAttrib2fv(indx: GLuint, values: StaticArray): void {
+ vertexAttrib2fv(this, indx, values)
+ }
+
+ @inline vertexAttrib3f(indx: GLuint, x: GLfloat, y: GLfloat, z: GLfloat): void {
+ vertexAttrib3f(this, indx, x, y, z)
+ }
+ @inline vertexAttrib3fv(indx: GLuint, values: StaticArray): void {
+ vertexAttrib3fv(this, indx, values)
+ }
+
+ @inline vertexAttrib4f(indx: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void {
+ vertexAttrib4f(this, indx, x, y, z, w)
+ }
+ @inline vertexAttrib4fv(indx: GLuint, values: StaticArray): void {
+ vertexAttrib4fv(this, indx, values)
+ }
+
+ @inline vertexAttribPointer(
+ indx: GLint,
+ size: GLint,
+ type: GLenum,
+ normalized: GLboolean,
+ stride: GLsizei,
+ offset: GLintptr,
+ ): void {
+ vertexAttribPointer(this, indx, size, type, normalized, stride, offset)
+ }
+
+ @inline viewport(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void {
+ viewport(this, x, y, width, height)
+ }
+
+ @inline copyBufferSubData(
+ readTarget: GLenum,
+ writeTarget: GLenum,
+ readOffset: GLintptr,
+ writeOffset: GLintptr,
+ size: GLsizeiptr,
+ ): void {
+ copyBufferSubData(this, readTarget, writeTarget, readOffset, writeOffset, size)
+ }
+
+ @inline getBufferSubData(
+ gl: WebGLRenderingContext,
+ target: GLenum,
+ srcByteOffset: GLintptr,
+ dstBuffer: ArrayBufferView,
+ dstOffset: GLuint = 0,
+ length: GLuint = 0,
+ ): void {
+ getBufferSubData(this, target, srcByteOffset, dstBuffer, dstOffset, length)
+ }
+
+ @inline blitFramebuffer(
+ gl: WebGLRenderingContext,
+ srcX0: GLint,
+ srcY0: GLint,
+ srcX1: GLint,
+ srcY1: GLint,
+ dstX0: GLint,
+ dstY0: GLint,
+ dstX1: GLint,
+ dstY1: GLint,
+ mask: GLbitfield,
+ filter: GLenum,
+ ): void {
+ blitFramebuffer(this, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)
+ }
+ @inline framebufferTextureLayer(
+ target: GLenum,
+ attachment: GLenum,
+ texture: WebGLTexture,
+ level: GLint,
+ layer: GLint,
+ ): void {
+ framebufferTextureLayer(this, target, attachment, texture, level, layer)
+ }
+ @inline invalidateFramebuffer(target: GLenum, attachments: GLenum[]): void {
+ invalidateFramebuffer(this, target, attachments)
+ }
+
+ @inline invalidateSubFramebuffer(
+ target: GLenum,
+ attachments: GLenum[],
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ ): void {
+ invalidateSubFramebuffer(this, target, attachments, x, y, width, height)
+ }
+ @inline readBuffer(src: GLenum): void {
+ readBuffer(this, src)
+ }
+
+ @inline getInternalformatParameter(target: GLenum, internalformat: GLenum, pname: GLenum): externref {
+ return getInternalformatParameter(this, target, internalformat, pname)
+ }
+ @inline renderbufferStorageMultisample(
+ target: GLenum,
+ samples: GLsizei,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+ ): void {
+ renderbufferStorageMultisample(this, target, samples, internalformat, width, height)
+ }
+
+ @inline texStorage2D(
+ target: GLenum,
+ levels: GLsizei,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+ ): void {
+ texStorage2D(this, target, levels, internalformat, width, height)
+ }
+ @inline texStorage3D(
+ target: GLenum,
+ levels: GLsizei,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ ): void {
+ texStorage3D(this, target, levels, internalformat, width, height, depth)
+ }
+
+ @inline texImage3D(
+ target: GLenum,
+ level: GLint,
+ internalformat: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ border: GLint,
+ format: GLenum,
+ typ: GLenum,
+ pboOffset: GLintptr,
+ ): void {
+ texImage3D(this, target, level, internalformat, width, height, depth, border, format, typ, pboOffset)
+ }
+
+ @inline texSubImage3D(
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ zoffset: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ format: GLenum,
+ typ: GLenum,
+ pboOffset: GLintptr,
+ ): void {
+ texSubImage3D(this, target, level, xoffset, yoffset, zoffset, width, height, depth, format, typ, pboOffset)
+ }
+
+ @inline copyTexSubImage3D(
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ zoffset: GLint,
+ x: GLint,
+ y: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ ): void {
+ copyTexSubImage3D(this, target, level, xoffset, yoffset, zoffset, x, y, width, height)
+ }
+
+ @inline compressedTexImage3D(
+ target: GLenum,
+ level: GLint,
+ internalformat: GLenum,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ border: GLint,
+ imageSize: GLsizei,
+ offset: GLintptr,
+ ): void {
+ compressedTexImage3D(this, target, level, internalformat, width, height, depth, border, imageSize, offset)
+ }
+
+ @inline compressedTexSubImage3D(
+ target: GLenum,
+ level: GLint,
+ xoffset: GLint,
+ yoffset: GLint,
+ zoffset: GLint,
+ width: GLsizei,
+ height: GLsizei,
+ depth: GLsizei,
+ format: GLenum,
+ imageSize: GLsizei,
+ offset: GLintptr,
+ ): void {
+ compressedTexSubImage3D(
+ this,
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ imageSize,
+ offset,
+ )
+ }
+
+ @inline getFragDataLocation(program: WebGLProgram, name: DOMString): GLint {
+ return getFragDataLocation(this, program, name)
+ }
+
+ @inline uniform1ui(location: WebGLUniformLocation, v0: GLuint): void {
+ uniform1ui(this, location, v0)
+ }
+ @inline uniform2ui(location: WebGLUniformLocation, v0: GLuint, v1: GLuint): void {
+ uniform2ui(this, location, v0, v1)
+ }
+ @inline uniform3ui(location: WebGLUniformLocation, v0: GLuint, v1: GLuint, v2: GLuint): void {
+ uniform3ui(this, location, v0, v1, v2)
+ }
+ @inline uniform4ui(location: WebGLUniformLocation, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint): void {
+ uniform4ui(this, location, v0, v1, v2, v3)
+ }
+
+ @inline uniform1uiv(
+ location: WebGLUniformLocation,
+ data: Uint32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniform1uiv(this, location, data, srcOffset, srcLength)
+ }
+
+ @inline uniform2uiv(
+ location: WebGLUniformLocation,
+ data: Uint32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniform2uiv(this, location, data, srcOffset, srcLength)
+ }
+ @inline uniform3uiv(
+ location: WebGLUniformLocation,
+ data: Uint32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniform3uiv(this, location, data, srcOffset, srcLength)
+ }
+ @inline uniform4uiv(
+ location: WebGLUniformLocation,
+ data: Uint32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniform4uiv(this, location, data, srcOffset, srcLength)
+ }
+ @inline uniformMatrix3x2fv(
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniformMatrix3x2fv(this, location, transpose, data, srcOffset, srcLength)
+ }
+ @inline uniformMatrix4x2fv(
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniformMatrix4x2fv(this, location, transpose, data, srcOffset, srcLength)
+ }
+
+ @inline uniformMatrix2x3fv(
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniformMatrix2x3fv(this, location, transpose, data, srcOffset, srcLength)
+ }
+ @inline uniformMatrix4x3fv(
+ gl: WebGLRenderingContext,
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniformMatrix4x3fv(this, location, transpose, data, srcOffset, srcLength)
+ }
+
+ @inline uniformMatrix2x4fv(
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniformMatrix2x4fv(this, location, transpose, data, srcOffset, srcLength)
+ }
+ @inline uniformMatrix3x4fv(
+ location: WebGLUniformLocation,
+ transpose: GLboolean,
+ data: Float32List,
+ srcOffset: GLuint = 0,
+ srcLength: GLuint = 0,
+ ): void {
+ uniformMatrix3x4fv(this, location, transpose, data, srcOffset, srcLength)
+ }
+
+ /* Vertex attribs */
+ @inline vertexAttribI4i(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint): void {
+ vertexAttribI4i(this, index, x, y, z, w)
+ }
+ @inline vertexAttribI4iv(index: GLuint, values: Int32List): void {
+ vertexAttribI4iv(this, index, values)
+ }
+ @inline vertexAttribI4ui(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint): void {
+ vertexAttribI4ui(this, index, x, y, z, w)
+ }
+ @inline vertexAttribI4uiv(index: GLuint, values: Uint32List): void {
+ vertexAttribI4uiv(this, index, values)
+ }
+ @inline vertexAttribIPointer(index: GLuint, size: GLint, typ: GLenum, stride: GLsizei, offset: GLintptr): void {
+ vertexAttribIPointer(this, index, size, typ, stride, offset)
+ }
+
+ @inline vertexAttribDivisor(index: GLuint, divisor: GLuint): void {
+ vertexAttribDivisor(this, index, divisor)
+ }
+ @inline drawArraysInstanced(mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei): void {
+ drawArraysInstanced(this, mode, first, count, instanceCount)
+ }
+ @inline drawElementsInstanced(
+ mode: GLenum,
+ count: GLsizei,
+ typ: GLenum,
+ offset: GLintptr,
+ instanceCount: GLsizei,
+ ): void {
+ drawElementsInstanced(this, mode, count, typ, offset, instanceCount)
+ }
+ @inline drawRangeElements(
+ mode: GLenum,
+ start: GLuint,
+ end: GLuint,
+ count: GLsizei,
+ typ: GLenum,
+ offset: GLintptr,
+ ): void {
+ drawRangeElements(this, mode, start, end, count, typ, offset)
+ }
+
+ @inline drawBuffers(gl: WebGLRenderingContext, buffers: GLenum[]): void {
+ drawBuffers(this, buffers)
+ }
+
+ @inline clearBufferfv(buffer: GLenum, drawbuffer: GLint, values: Float32List, srcOffset: GLuint = 0): void {
+ clearBufferfv(this, buffer, drawbuffer, values, srcOffset)
+ }
+ @inline clearBufferiv(buffer: GLenum, drawbuffer: GLint, values: Int32List, srcOffset: GLuint = 0): void {
+ clearBufferiv(this, buffer, drawbuffer, values, srcOffset)
+ }
+ @inline clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Uint32List, srcOffset: GLuint = 0): void {
+ clearBufferuiv(this, buffer, drawbuffer, values, srcOffset)
+ }
+
+ @inline clearBufferfi(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint): void {
+ clearBufferfi(this, buffer, drawbuffer, depth, stencil)
+ }
+
+ /* Query Objects */
+ @inline createQuery(): WebGLQuery {
+ return createQuery(this)
+ }
+ @inline deleteQuery(query: WebGLQuery): void {
+ deleteQuery(this, query)
+ }
+
+ @inline isQuery(query: WebGLQuery): GLboolean {
+ return isQuery(this, query)
+ }
+ @inline beginQuery(target: GLenum, query: WebGLQuery): void {
+ beginQuery(this, target, query)
+ }
+ @inline endQuery(target: GLenum): void {
+ endQuery(this, target)
+ }
+ @inline getQuery(target: GLenum, pname: GLenum): WebGLQuery {
+ return getQuery(this, target, pname)
+ }
+ @inline getQueryParameter(query: WebGLQuery, pname: GLenum): externref {
+ return getQueryParameter(this, query, pname)
+ }
+
+ @inline createSampler(): WebGLSampler {
+ return createSampler(this)
+ }
+
+ @inline deleteSampler(sampler: WebGLSampler): void {
+ deleteSampler(this, sampler)
+ }
+
+ @inline isSampler(sampler: WebGLSampler): GLboolean {
+ return isSampler(this, sampler)
+ }
+
+ @inline bindSampler(unit: GLuint, sampler: WebGLSampler): void {
+ bindSampler(this, unit, sampler)
+ }
+ @inline samplerParameteri(sampler: WebGLSampler, pname: GLenum, param: GLint): void {
+ samplerParameteri(this, sampler, pname, param)
+ }
+ @inline samplerParameterf(sampler: WebGLSampler, pname: GLenum, param: GLfloat): void {
+ samplerParameterf(this, sampler, pname, param)
+ }
+ @inline getSamplerParameter(sampler: WebGLSampler, pname: GLenum): externref {
+ return getSamplerParameter(this, sampler, pname)
+ }
+
+ /* Sync objects */
+ @inline fenceSync(condition: GLenum, flags: GLbitfield): WebGLSync {
+ return fenceSync(this, condition, flags)
+ }
+ /*[WebGLHandlesContextLoss]*/
+ @inline isSync(sync: WebGLSync): GLboolean {
+ return isSync(this, sync)
+ }
+
+ @inline deleteSync(sync: WebGLSync): void {
+ deleteSync(this, sync)
+ }
+
+ @inline clientWaitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLuint64): GLenum {
+ return clientWaitSync(this, sync, flags, timeout)
+ }
+ @inline waitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLint64): void {
+ waitSync(this, sync, flags, timeout)
+ }
+ @inline getSyncParameter(sync: WebGLSync, pname: GLenum): externref {
+ return getSyncParameter(this, sync, pname)
+ }
+
+ @inline createTransformFeedback(): WebGLTransformFeedback {
+ return createTransformFeedback(this)
+ }
+ @inline deleteTransformFeedback(tf: WebGLTransformFeedback): void {
+ deleteTransformFeedback(this, tf)
+ }
+
+ @inline isTransformFeedback(tf: WebGLTransformFeedback): GLboolean {
+ return isTransformFeedback(this, tf)
+ }
+ @inline bindTransformFeedback(target: GLenum, tf: WebGLTransformFeedback): void {
+ bindTransformFeedback(this, target, tf)
+ }
+ @inline beginTransformFeedback(primitiveMode: GLenum): void {
+ beginTransformFeedback(this, primitiveMode)
+ }
+
+ @inline endTransformFeedback(): void {
+ endTransformFeedback(this)
+ }
+
+ @inline transformFeedbackVaryings(program: WebGLProgram, varyings: DOMString[], bufferMode: GLenum): void {
+ transformFeedbackVaryings(this, program, varyings, bufferMode)
+ }
+ // @inline getTransformFeedbackVarying(program: WebGLProgram, index: GLuint): WebGLActiveInfo {
+ // return getTransformFeedbackVarying(this, program, index)
+ // }
+ @inline pauseTransformFeedback(): void {
+ pauseTransformFeedback(this)
+ }
+
+ @inline resumeTransformFeedback(): void {
+ resumeTransformFeedback(this)
+ }
+
+ @inline bindBufferBase(target: GLenum, index: GLuint, buffer: WebGLBuffer): void {
+ bindBufferBase(this, target, index, buffer)
+ }
+ @inline bindBufferRange(
+ target: GLenum,
+ index: GLuint,
+ buffer: WebGLBuffer,
+ offset: GLintptr,
+ size: GLsizeiptr,
+ ): void {
+ bindBufferRange(this, target, index, buffer, offset, size)
+ }
+ @inline getIndexedParameter(target: GLenum, index: GLuint): externref {
+ return getIndexedParameter(this, target, index)
+ }
+ @inline getUniformIndices(program: WebGLProgram, uniformNames: DOMString[]): GLuint[] {
+ return getUniformIndices(this, program, uniformNames)
+ }
+ @inline getActiveUniforms(program: WebGLProgram, uniformIndices: GLuint[], pname: GLenum): externref {
+ return getActiveUniforms(this, program, uniformIndices, pname)
+ }
+ @inline getUniformBlockIndex(program: WebGLProgram, uniformBlockName: DOMString): GLuint {
+ return getUniformBlockIndex(this, program, uniformBlockName)
+ }
+ @inline getActiveUniformBlockParameter(program: WebGLProgram, uniformBlockIndex: GLuint, pname: GLenum): externref {
+ return getActiveUniformBlockParameter(this, program, uniformBlockIndex, pname)
+ }
+ @inline getActiveUniformBlockName(program: WebGLProgram, uniformBlockIndex: GLuint): DOMString {
+ return getActiveUniformBlockName(this, program, uniformBlockIndex)
+ }
+ @inline uniformBlockBinding(program: WebGLProgram, uniformBlockIndex: GLuint, _uniformBlockBinding: GLuint): void {
+ uniformBlockBinding(this, program, uniformBlockIndex, _uniformBlockBinding)
+ }
+
+ @inline createVertexArray(): WebGLVertexArrayObject {
+ return createVertexArray(this)
+ }
+ @inline deleteVertexArray(vertexArray: WebGLVertexArrayObject): void {
+ deleteVertexArray(this, vertexArray)
+ }
+
+ @inline isVertexArray(vertexArray: WebGLVertexArrayObject): GLboolean {
+ return isVertexArray(this, vertexArray)
+ }
+
+ @inline bindVertexArray(array: WebGLVertexArrayObject): void {
+ bindVertexArray(this, array)
+ }
+}
+
+export enum WebGLDataBufferTypes {
+ ArrayBufferView,
+ Uint8Array,
+ Float64Array,
+}
diff --git a/assembly/elements/HTML/HTMLCanvasElement/webgl/index.ts b/assembly/elements/HTML/HTMLCanvasElement/webgl/index.ts
new file mode 100644
index 0000000..7b10ad4
--- /dev/null
+++ b/assembly/elements/HTML/HTMLCanvasElement/webgl/index.ts
@@ -0,0 +1 @@
+export * from './WebGLRenderingContext'
diff --git a/assembly/elements/HTML/HTMLElement.ts b/assembly/elements/HTML/HTMLElement.ts
index d501e53..493be96 100644
--- a/assembly/elements/HTML/HTMLElement.ts
+++ b/assembly/elements/HTML/HTMLElement.ts
@@ -1,6 +1,14 @@
+import {getInnerText, setInnerText} from '../../imports'
import {Element} from '../Element'
export abstract class HTMLElement extends Element {
+ get innerText(): string {
+ return getInnerText(this)
+ }
+ set innerText(value: string | null) {
+ setInnerText(this, value)
+ }
+
// The following are for use by custom elements, but not required to be
// implemented so not abstract. {{{
static observedAttributes: string[] = []
diff --git a/assembly/elements/HTML/HTMLTemplateElement.ts b/assembly/elements/HTML/HTMLTemplateElement.ts
index a1e0a02..8655115 100644
--- a/assembly/elements/HTML/HTMLTemplateElement.ts
+++ b/assembly/elements/HTML/HTMLTemplateElement.ts
@@ -1,10 +1,7 @@
import {DocumentFragment} from '../../DocumentFragment'
+import {getContent} from '../../imports'
import {HTMLElement} from './HTMLElement'
-// @ts-expect-error
-@external('asDOM_HTMLTemplateElement', 'getContent')
-declare function getContent(id: usize, fragId: usize): void
-
export class HTMLTemplateElement extends HTMLElement {
private __frag: DocumentFragment | null = null
@@ -16,7 +13,7 @@ export class HTMLTemplateElement extends HTMLElement {
this.__frag = frag
}
- getContent(this.__ptr__, frag.__ptr__)
+ getContent(this, frag)
return frag
}
diff --git a/assembly/elements/HTML/index.ts b/assembly/elements/HTML/index.ts
index 490c627..d1af967 100644
--- a/assembly/elements/HTML/index.ts
+++ b/assembly/elements/HTML/index.ts
@@ -3,6 +3,7 @@ import {HTMLElement} from './HTMLElement'
export * from './HTMLElement'
export * from './Audio'
export * from './HTMLTemplateElement'
+export * from './HTMLCanvasElement/index'
// We can move any of these into their own file if/when they need custom implementation.
export class HTMLBodyElement extends HTMLElement {}
diff --git a/assembly/elements/README.md b/assembly/elements/README.md
new file mode 100644
index 0000000..ca046d6
--- /dev/null
+++ b/assembly/elements/README.md
@@ -0,0 +1,7 @@
+# When adding new element classes (or classes for any object)
+
+- make sure to add their type to `ObjectType` in `ObjectType.ts`
+- add them to the `makeObject` function in `assembly/utils/makeObject.ts`
+- add them to the `getObjectType` function in `glue/index.js`, in the same order and with the same number as in `ObjectType`.
+
+The numbers in `ObjectType` have gaps in order to group different categories of object types.
diff --git a/assembly/glue.ts b/assembly/glue.ts
index dca2640..c8dc88f 100644
--- a/assembly/glue.ts
+++ b/assembly/glue.ts
@@ -1,18 +1,19 @@
+import './__finalize'
import {HTMLElement} from './elements/HTML/HTMLElement'
-import {refs} from './refs'
+import {EventListener} from './EventListener'
export function asdom_connectedCallback(id: usize): void {
- const el = refs.get(id) as HTMLElement
+ const el = changetype(id)
el.connectedCallback()
}
export function asdom_disconnectedCallback(id: usize): void {
- const el = refs.get(id) as HTMLElement
+ const el = changetype(id)
el.disconnectedCallback()
}
export function asdom_adoptedCallback(id: usize): void {
- const el = refs.get(id) as HTMLElement
+ const el = changetype(id)
el.disconnectedCallback()
}
@@ -22,6 +23,11 @@ export function asdom_attributeChangedCallback(
oldValue: string | null,
newValue: string | null,
): void {
- const el = refs.get(id) as HTMLElement
+ const el = changetype(id)
el.attributeChangedCallback(name, oldValue, newValue)
}
+
+export function asdom_triggerEventListener(id: usize /*TODO , eventPtr: usize*/): void {
+ const listener = changetype(id)
+ listener.handleEvent()
+}
diff --git a/assembly/imports.ts b/assembly/imports.ts
new file mode 100644
index 0000000..f492626
--- /dev/null
+++ b/assembly/imports.ts
@@ -0,0 +1,452 @@
+import { GLbitfield, GLboolean, GLclampf, GLenum, GLfloat, GLint, GLintptr, GLsizei, GLuint, WebGLBuffer, WebGLDataBufferTypes, WebGLExtension, WebGLProgram, WebGLRenderingContext, WebGLShader, WebGLUniformLocation } from "./elements";
+import { Object } from "./Object";
+
+// @ts-expect-error
+@external('asDOM', 'trackNextRef')
+export declare function trackNextRef(id: Object): void
+
+// @ts-expect-error
+@external('asDOM', 'releaseObject')
+export declare function releaseObject(ptr: usize): void
+
+// @ts-expect-error
+@external('asDOM', 'log')
+export declare function log(msg: string): void
+
+// @ts-expect-error
+@external('asDOM_Object', 'toString')
+export declare function toString(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_History', 'pushState')
+export declare function pushState(id: Object, state: Object, title: string, url: string): void
+
+// @ts-expect-error
+@external('asDOM_History', 'replaceState')
+export declare function replaceState(id: Object, state: Object, title: string, url: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'setHref')
+export declare function setHref(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'getHref')
+export declare function getHref(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'setProtocol')
+export declare function setProtocol(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'getProtocol')
+export declare function getProtocol(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'setHost')
+export declare function setHost(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'getHost')
+export declare function getHost(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'setHostname')
+export declare function setHostname(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'getHostname')
+export declare function getHostname(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'setPort')
+export declare function setPort(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'getPort')
+export declare function getPort(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'setPathname')
+export declare function setPathname(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'getPathname')
+export declare function getPathname(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'setSearch')
+export declare function setSearch(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'getSearch')
+export declare function getSearch(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'setHash')
+export declare function setHash(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'getHash')
+export declare function getHash(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'getOrigin')
+export declare function getOrigin(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Location', 'reload')
+export declare function reload(id: Object): void
+
+// @ts-expect-error
+@external('asDOM_Location', 'replace')
+export declare function replace(id: Object, value: string): void
+
+// @ts-expect-error
+@external('asDOM_EventTarget', 'addEventListenerCallback')
+export declare function addEventListenerCallback(id: Object, eventName: string, callbackIndex: u32): void
+
+// @ts-expect-error
+@external('asDOM_EventTarget', 'addEventListenerObject')
+export declare function addEventListenerObject(id: Object, eventName: string, listenerPtr: Object): void
+
+// @ts-expect-error
+@external('asDOM_EventTarget', 'removeEventListenerCallback')
+export declare function removeEventListenerCallback(id: Object, eventName: string, callbackIndex: u32): void
+
+// @ts-expect-error
+@external('asDOM_EventTarget', 'removeEventListenerObject')
+export declare function removeEventListenerObject(id: Object, eventName: string, listenerPtr: Object): void
+
+// @ts-expect-error
+@external('asDOM_Window', 'trackWindow')
+export declare function trackWindow(id: Object): void
+
+// @ts-expect-error
+@external('asDOM_Window', 'getDocument')
+export declare function getDocument(id: Object, docId: Object): void
+
+// @ts-expect-error
+@external('asDOM_Window', 'getCustomElements')
+export declare function getCustomElements(id: Object, ceId: Object): void
+
+// @ts-expect-error
+@external('asDOM_Window', 'getHistory')
+export declare function getHistory(id: Object, histId: Object): void
+
+// @ts-expect-error
+@external('asDOM_Window', 'getLocation')
+export declare function getLocation(id: Object, locationId: Object): void
+
+// @ts-expect-error
+@external('asDOM_Window', 'setOnpopstate')
+export declare function setOnpopstate(id: Object, index: u32): void
+
+// // @ts-expect-error
+// @external('asDOM_Window', 'getOnpopstate')
+// export declare function getOnpopstate(id: Object): ???
+
+// @ts-expect-error
+@external('asDOM_CustomElementRegistry', 'define')
+export declare function define(id: Object, tag: string, factoryIndex: i32, attributes: string[]): void
+
+// @ts-expect-error
+@external('asDOM_Document', 'getBody')
+export declare function getBody(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Document', 'getUrl')
+export declare function getUrl(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Document', 'createElement')
+export declare function createElement(docId: Object, tagName: string): i32
+
+// @ts-expect-error
+@external('asDOM_Document', 'createTextNode')
+export declare function createTextNode(docId: Object, data: string): i32
+
+// @ts-expect-error
+@external('asDOM_Node', 'nodeAppendChild')
+export declare function nodeAppendChild(parentId: Object, childId: Object): void
+
+// @ts-expect-error
+@external('asDOM_Node', 'nodeRemoveChild')
+export declare function nodeRemoveChild(parentId: Object, childId: Object): void
+
+// @ts-expect-error
+@external('asDOM_Node', 'getParentNode')
+export declare function getParentNode(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Node', 'getParentElement')
+export declare function getParentElement(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Node', 'getFirstChild')
+export declare function getFirstChild(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Node', 'getLastChild')
+export declare function getLastChild(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Node', 'getNextSibling')
+export declare function getNextSibling(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Node', 'getPreviousSibling')
+export declare function getPreviousSibling(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Node', 'cloneNode')
+export declare function cloneNode(id: Object, deep?: boolean): i32
+
+// @ts-expect-error
+@external('asDOM_Node', 'getChildNodes')
+export declare function getChildNodes(nodeId: Object, listId: Object): void
+
+// @ts-expect-error
+@external('asDOM_HTMLElement', 'setInnerText')
+export declare function setInnerText(id: Object, value: string | null): void
+
+// @ts-expect-error
+@external('asDOM_HTMLElement', 'getInnerText')
+export declare function getInnerText(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Element', 'getTagName')
+export declare function getTagName(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Element', 'elSetAttribute')
+export declare function elSetAttribute(id: Object, attr: string, value: string | null): void
+
+// @ts-expect-error
+@external('asDOM_Element', 'elGetAttribute')
+export declare function elGetAttribute(id: Object, attr: string): string | null
+
+// @ts-expect-error
+@external('asDOM_Element', 'setInnerHTML')
+export declare function setInnerHTML(id: Object, value: string | null): void
+
+// @ts-expect-error
+@external('asDOM_Element', 'getInnerHTML')
+export declare function getInnerHTML(id: Object): string
+
+// @ts-expect-error
+@external('asDOM_Element', 'getChildren')
+export declare function getChildren(nodeId: Object, listId: Object): void
+
+// @ts-expect-error
+@external('asDOM_Element', 'getClientWidth')
+export declare function getClientWidth(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'getClientHeight')
+export declare function getClientHeight(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'getFirstElementChild')
+export declare function getFirstElementChild(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'getLastElementChild')
+export declare function getLastElementChild(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'getNextElementSibling')
+export declare function getNextElementSibling(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'getPreviousElementSibling')
+export declare function getPreviousElementSibling(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'elClick')
+export declare function elClick(id: Object): void
+
+// @ts-expect-error
+@external('asDOM_Element', 'setOnclick')
+export declare function setOnclick(id: Object, index: u32): void
+
+// // @ts-expect-error
+// @external('asDOM_Element', 'getOnclick')
+// export declare function getOnclick(id: Object): ???
+
+// @ts-expect-error
+@external('asDOM_Element', 'remove')
+export declare function remove(id: Object): void
+
+// @ts-expect-error
+@external('asDOM_Element', 'querySelector')
+export declare function querySelector(id: Object, selectors: string): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'querySelectorAll')
+export declare function querySelectorAll(id: Object, selectors: string): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'getShadowRoot')
+export declare function getShadowRoot(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_Element', 'attachShadow')
+export declare function attachShadow(id: Object, rootId: Object, mode: string): i32
+
+// @ts-expect-error
+@external('asDOM_Audio', 'initAudio')
+export declare function initAudio(id: Object, src: string): void
+
+// @ts-expect-error
+@external('asDOM_Audio', 'pauseAudio')
+export declare function pauseAudio(id: Object): void
+
+// @ts-expect-error
+@external('asDOM_Audio', 'playAudio')
+export declare function playAudio(id: Object): void
+
+// @ts-expect-error
+@external('asDOM_Audio', 'getAutoplay')
+export declare function getAutoplay(id: Object): boolean
+
+// @ts-expect-error
+@external('asDOM_Audio', 'setAutoplay')
+export declare function setAutoplay(id: Object, toggle: boolean): void
+
+// @ts-expect-error
+@external('asDOM_HTMLTemplateElement', 'getContent')
+export declare function getContent(id: Object, fragId: Object): void
+
+// @ts-expect-error
+@external('asDOM_HTMLCanvasElement', 'getContext')
+export declare function getContext(id: Object, ctxId: Object, typeNum: i32 /* TODO , options */): void
+
+// @ts-expect-error
+@external('asDOM_NodeList', 'getLength')
+export declare function getLength(id: Object): i32
+
+// @ts-expect-error
+@external('asDOM_NodeList', 'item')
+export declare function item(id: Object, index: i32): i32
+
+// // == debug function not part of WebGL
+// // @ts-expect-error
+// @external('asDOM_WebGLRenderingContext', 'logi32')
+// export declare function logi32(arg: i32): void
+// // @ts-expect-error
+// @external('asDOM_WebGLRenderingContext', 'logf32')
+// export declare function logf32(arg: f32): void
+
+// // == Not a part of WebGL, but there must be a way to create and load images
+// // @ts-expect-error
+// @external('asDOM_WebGLRenderingContext', 'createImage')
+// export declare function createImage(image_location: string): ImageData
+// // @ts-expect-error
+// @external('asDOM_WebGLRenderingContext', 'imageReady')
+// export declare function imageReady(image_id: ImageData): bool
+
+// // @ts-expect-error
+// @external('asDOM_WebGLRenderingContext', 'getStencil')
+// export declare function getStencil(gl: WebGLContextAttributes): GLboolean
+// // @ts-expect-error
+// @external('asDOM_WebGLRenderingContext', 'setStencil')
+// export declare function setStencil(gl: WebGLContextAttributes, value: GLboolean): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'attachShader')
+export declare function attachShader(gl: WebGLRenderingContext, program: WebGLProgram, shader: WebGLShader): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'bindBuffer')
+export declare function bindBuffer(gl: WebGLRenderingContext, target: GLenum, buffer: WebGLBuffer): void
+
+// TODO use TypedArray instead of StaticArray to match JS/TS APIs after this is fixed: https://github.com/AssemblyScript/assemblyscript/issues/2038
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'bufferData')
+// export declare function bufferData(gl: WebGLRenderingContext, arrayType: WebGLDataBufferTypes, target: GLenum, data: TypedArray, usage: GLenum): void
+export declare function bufferData(gl: WebGLRenderingContext, arrayType: WebGLDataBufferTypes, target: GLenum, data: StaticArray, usage: GLenum): void
+
+// Pattern: No glue code needed for WebGLRenderingContext.canvas because we
+// know ahead of time that it will be the canvas on which getContext was
+// called, so we assign that when making WebGLRenderingContext and we don't
+// need to cross to JS for this readonly property.
+// // @ts-expect-error
+// @external('asDOM_WebGLRenderingContext', 'getCanvas')
+// export declare function getCanvas(gl: WebGLRenderingContext): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'clear')
+export declare function clear(gl: WebGLRenderingContext, mask: GLbitfield): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'clearColor')
+export declare function clearColor(gl: WebGLRenderingContext, red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'clearDepth')
+export declare function clearDepth(gl: WebGLRenderingContext, depth: GLclampf): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'compileShader')
+export declare function compileShader(gl: WebGLRenderingContext, shader: WebGLShader): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'createBuffer')
+export declare function createBuffer(gl: WebGLRenderingContext, buffer: WebGLBuffer): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'createProgram')
+export declare function createProgram(gl: WebGLRenderingContext, program: WebGLProgram): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'createShader')
+export declare function createShader(gl: WebGLRenderingContext, shader: WebGLShader, type: GLenum): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'depthFunc')
+export declare function depthFunc(gl: WebGLRenderingContext, func: GLenum): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'drawArrays')
+export declare function drawArrays(gl: WebGLRenderingContext, mode: GLenum, first: GLint, count: GLsizei): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'enable')
+export declare function enable(gl: WebGLRenderingContext, capability: GLenum): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'enableVertexAttribArray')
+export declare function enableVertexAttribArray(gl: WebGLRenderingContext, index: GLuint): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'getAttribLocation')
+export declare function getAttribLocation(gl: WebGLRenderingContext, program: WebGLProgram, name: string): GLint
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'getExtension')
+export declare function getExtension(gl: WebGLRenderingContext, extId: WebGLExtension, typeNum: i32): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'getUniformLocation')
+export declare function getUniformLocation(gl: WebGLRenderingContext, uniLocationId: WebGLUniformLocation, program: WebGLProgram, name: string): WebGLUniformLocation
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'linkProgram')
+export declare function linkProgram(gl: WebGLRenderingContext, program: WebGLProgram): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'shaderSource')
+export declare function shaderSource(gl: WebGLRenderingContext, shader: WebGLShader, source: string): void
+
+// TODO use TypedArray instead of StaticArray after https://github.com/AssemblyScript/assemblyscript/issues/2038
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'uniformMatrix4fv')
+export declare function uniformMatrix4fv(gl: WebGLRenderingContext, location: WebGLUniformLocation, transpose: GLboolean, value: StaticArray): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'useProgram')
+export declare function useProgram(gl: WebGLRenderingContext, program: WebGLProgram): void
+
+// @ts-expect-error
+@external('asDOM_WebGLRenderingContext', 'vertexAttribPointer')
+export declare function vertexAttribPointer(gl: WebGLRenderingContext, indx: GLint, size: GLint, type: GLenum, normalized: GLboolean, stride: GLsizei, offset: GLintptr): void
diff --git a/assembly/index.ts b/assembly/index.ts
index 08adf25..45f130e 100644
--- a/assembly/index.ts
+++ b/assembly/index.ts
@@ -1,7 +1,16 @@
-export * from './Window'
+// TODO export everything
+export * from './CustomElementRegistry'
export * from './Document'
export * from './DocumentFragment'
+export * from './EventListener'
+export * from './EventTarget'
+export * from './HTMLCollection'
+export * from './History'
+export * from './Location'
export * from './Node'
+export * from './NodeList'
export * from './Object'
export * from './Text'
+export * from './Window'
+
export * from './elements/index'
diff --git a/assembly/nodes/ShadowRoot.ts b/assembly/nodes/ShadowRoot.ts
new file mode 100644
index 0000000..c3b33df
--- /dev/null
+++ b/assembly/nodes/ShadowRoot.ts
@@ -0,0 +1,12 @@
+import {DocumentFragment} from '../DocumentFragment'
+import {getInnerHTML, setInnerHTML} from '../imports'
+
+export class ShadowRoot extends DocumentFragment {
+ // This is non-standard for ShadowRoot, but every browser has it.
+ set innerHTML(str: string) {
+ setInnerHTML(this, str)
+ }
+ get innerHTML(): string {
+ return getInnerHTML(this)
+ }
+}
diff --git a/assembly/refs.ts b/assembly/refs.ts
deleted file mode 100644
index bb7e052..0000000
--- a/assembly/refs.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import {Object} from './Object'
-
-// This is for asdom's internal use only.
-export const refs: Map = new Map()
diff --git a/assembly/utils.ts b/assembly/utils.ts
new file mode 100644
index 0000000..abda924
--- /dev/null
+++ b/assembly/utils.ts
@@ -0,0 +1,102 @@
+import {ObjectType} from './ObjectType'
+import {log, trackNextRef} from './imports'
+import {
+ Node,
+ HTMLBodyElement,
+ HTMLDivElement,
+ HTMLSpanElement,
+ HTMLParagraphElement,
+ HTMLAnchorElement,
+ HTMLScriptElement,
+ HTMLTemplateElement,
+ HTMLCanvasElement,
+ Audio,
+ Image,
+ HTMLHeadingElement,
+ HTMLUnknownElement,
+ Text,
+ Object,
+ NodeList,
+ HTMLCollection,
+ Element,
+} from './index'
+
+export const DEBUG: boolean = false
+
+export function logDebug(s: string): void {
+ if (DEBUG) log('AS DEBUG: ' + s)
+}
+
+export function makeObject(type: ObjectType): Object {
+ let obj: Object
+
+ // Elements
+ if (type == ObjectType.body) obj = new HTMLBodyElement()
+ else if (type == ObjectType.div) obj = new HTMLDivElement()
+ else if (type == ObjectType.span) obj = new HTMLSpanElement()
+ else if (type == ObjectType.p) obj = new HTMLParagraphElement()
+ else if (type == ObjectType.a) obj = new HTMLAnchorElement()
+ else if (type == ObjectType.script) obj = new HTMLScriptElement()
+ else if (type == ObjectType.template) obj = new HTMLTemplateElement()
+ else if (type == ObjectType.audio) obj = new Audio()
+ else if (type == ObjectType.img) obj = new Image()
+ else if (type == ObjectType.h1) obj = new HTMLHeadingElement()
+ else if (type == ObjectType.h2) obj = new HTMLHeadingElement()
+ else if (type == ObjectType.h3) obj = new HTMLHeadingElement()
+ else if (type == ObjectType.h4) obj = new HTMLHeadingElement()
+ else if (type == ObjectType.h5) obj = new HTMLHeadingElement()
+ else if (type == ObjectType.h6) obj = new HTMLHeadingElement()
+ else if (type == ObjectType.canvas) obj = new HTMLCanvasElement()
+ else if (type === ObjectType.unknown) obj = new HTMLUnknownElement()
+ // Text nodes
+ else if (type === ObjectType.text) obj = new Text()
+ // Node lists
+ else if (type === ObjectType.htmlCollection) obj = new HTMLCollection()
+ else if (type === ObjectType.nodeListOfNode) obj = new NodeList()
+ else if (type === ObjectType.nodeListOfElement) obj = new NodeList()
+ // Anything else
+ else throw new Error('Hyphenated or custom elements not yet supported.')
+
+ return obj
+}
+
+// Use this only for APIs that return Object or Object|null!
+export function idToNullOrObject(id: i32): Object | null {
+ logDebug('idToNullOrObject, ' + id.toString())
+
+ // if null, it means there is no element on the JS-side.
+ if (id == 0) {
+ logDebug('idToNullOrObject returning null')
+
+ return null
+ }
+ // If negative, there is an element on the JS-side that doesn't have a
+ // corresponding AS-side instance yet. In this case we need to
+ // create a new instance based on its type.
+ else if (id < 0) {
+ logDebug('idToNullOrObject id < 0')
+
+ const obj = makeObject(-id)
+
+ // Associate the AS-side instance with the JS-side instance.
+ trackNextRef(obj)
+
+ return obj
+ }
+
+ // If we reach here then there is already an AS-side instance
+ // associated with a JS-side instance, and the JS side gave us the ID
+ // (pointer) of our AS-side object to return. We might reach here, for
+ // example, if we use appendChild to pass an existing child within AS
+ // instead of using innerHTML. By using innerHTML and sending a string
+ // to JS, it can create a whole tree but none of those nodes will be
+ // tracked. Finally, if we do try to access them, we lazily associate
+ // new AS-side objects in the previous conditional block.
+ else {
+ logDebug('idToNullOrObject got reference ID: ' + id.toString())
+
+ return changetype(id) // It must be a Object. Use this function only for APIs that return Object or Object|null.
+ }
+}
+
+export const valueNotChanged = I32.MIN_VALUE
diff --git a/aswebglue/ASWebGLue.d.ts b/aswebglue/ASWebGLue.d.ts
new file mode 100644
index 0000000..4402a37
--- /dev/null
+++ b/aswebglue/ASWebGLue.d.ts
@@ -0,0 +1,3 @@
+export declare function print(str: string): void
+export declare function ASWebGLReady(wasm_obj: object, importObject: object): void
+export declare function initASWebGLue(importObject: object): void
\ No newline at end of file
diff --git a/aswebglue/ASWebGLue.js b/aswebglue/ASWebGLue.js
new file mode 100644
index 0000000..2d3320e
--- /dev/null
+++ b/aswebglue/ASWebGLue.js
@@ -0,0 +1,1502 @@
+export function print(str) {
+ console.log(str)
+}
+
+export function ASWebGLReady(wasmModule, importObject) {
+ console.log('ASWebGLReady')
+ if (wasmModule == null) {
+ console.error('ASWebGLReady requires the WebAssembly Instance as 1st parameter')
+ return
+ }
+ if (wasmModule == null) {
+ console.error('ASWebGLReady requires import object as 2nd parameter')
+ return
+ }
+ importObject.WebGL.WEBGL_READY = true
+ console.log('=========================')
+ console.log(wasmModule.instance.exports)
+ console.log(wasmModule.instance.exports['__rtti_base'])
+ importObject.WebGL.RTTI_BASE = wasmModule.instance.exports['__rtti_base']
+}
+
+export function initASWebGLue(importObject) {
+ if (!importObject?.env?.memory) {
+ throw new Error('You need to pass an importObject with .env.memory in it.')
+ }
+
+ if (importObject.WebGL == null) {
+ importObject.WebGL = {}
+ }
+
+ const WebGL = importObject.WebGL
+
+ importObject.env.abort = (...args) => {
+ console.log('abort')
+ console.log(WebGL.getString(args[0]))
+ }
+
+ importObject.WebGL.WEBGL_READY = false
+ importObject.WebGL.memory = importObject.env.memory
+
+ importObject.WebGL.contextArray = []
+ importObject.WebGL.textureArray = []
+ importObject.WebGL.programArray = []
+ importObject.WebGL.shaderArray = []
+ importObject.WebGL.bufferArray = []
+ importObject.WebGL.frameBufferArray = []
+ importObject.WebGL.renderBufferArray = []
+ importObject.WebGL.uniformLocationArray = []
+ importObject.WebGL.vaoArray = []
+
+ importObject.WebGL.SIZE_OFFSET = -4
+ importObject.WebGL.ID_OFFSET = -8
+ importObject.WebGL.CHUNKSIZE = 1024
+ importObject.WebGL.STRING_ID = 1
+ importObject.WebGL.RTTI_BASE = 0
+ importObject.WebGL.VAL_ALIGN_OFFSET = 6
+
+ importObject.ARRAYBUFFERVIEW_DATASTART_OFFSET = 4
+ importObject.ARRAY_LENGTH_OFFSET = 12
+
+ /** No specific flags. */
+ importObject.WebGL.NONE = 0x00
+ /** Type is an `ArrayBufferView`. */
+ importObject.WebGL.ARRAYBUFFERVIEW = 0x01
+ /** Type is an `Array`. */
+ importObject.WebGL.ARRAY = 0x0002
+ /** Type is a `StaticArray`. */
+ importObject.WebGL.STATICARRAY = 0x0004
+ /** Type is a `Set`. */
+ importObject.WebGL.SET = 0x000008
+ /** Type is a `Map`. */
+ importObject.WebGL.MAP = 0x000010
+ /** Type is inherently acyclic. */
+ importObject.WebGL.ACYCLIC = 0x000020
+ /** Value alignment of 1 byte. */
+ importObject.WebGL.VALUE_ALIGN_0 = 0x000040
+ /** Value alignment of 2 bytes. */
+ importObject.WebGL.VALUE_ALIGN_1 = 0x000080
+ /** Value alignment of 4 bytes. */
+ importObject.WebGL.VALUE_ALIGN_2 = 0x000100
+ /** Value alignment of 8 bytes. */
+ importObject.WebGL.VALUE_ALIGN_3 = 0x000200
+ /** Value alignment of 16 bytes. */
+ importObject.WebGL.VALUE_ALIGN_4 = 0x000400
+ /** Value is a signed type. */
+ importObject.WebGL.VALUE_SIGNED = 0x000800
+ /** Value is a float type. */
+ importObject.WebGL.VALUE_FLOAT = 0x001000
+ /** Value type is nullable. */
+ importObject.WebGL.VALUE_NULLABLE = 0x002000
+ /** Value type is managed. */
+ importObject.WebGL.VALUE_MANAGED = 0x004000
+ /** Key alignment of 1 byte. */
+ importObject.WebGL.KEY_ALIGN_0 = 0x008000
+ /** Key alignment of 2 bytes. */
+ importObject.WebGL.KEY_ALIGN_1 = 0x010000
+ /** Key alignment of 4 bytes. */
+ importObject.WebGL.KEY_ALIGN_2 = 0x020000
+ /** Key alignment of 8 bytes. */
+ importObject.WebGL.KEY_ALIGN_3 = 0x040000
+ /** Key alignment of 16 bytes. */
+ importObject.WebGL.KEY_ALIGN_4 = 0x080000
+ /** Key is a signed type. */
+ importObject.WebGL.KEY_SIGNED = 0x100000
+ /** Key is a float type. */
+ importObject.WebGL.KEY_FLOAT = 0x200000
+ /** Key type is nullable. */
+ importObject.WebGL.KEY_NULLABLE = 0x400000
+ /** Key type is managed. */
+ importObject.WebGL.KEY_MANAGED = 0x800000
+
+ // DEBUG STUFF -----------
+
+ importObject.WebGL.logi32 = arg => {
+ console.log(`logi32=${arg}`)
+ }
+
+ importObject.WebGL.logf32 = arg => {
+ console.log(`logf32=${arg}`)
+ }
+
+ // END DEBUG STUFF --------
+
+ importObject.WebGL.getView = (alignLog2, signed, float) => {
+ const buffer = WebGL.memory.buffer
+
+ if (float) {
+ switch (alignLog2) {
+ case 2:
+ return new Float32Array(buffer)
+ case 3:
+ return new Float64Array(buffer)
+ }
+ } else {
+ switch (alignLog2) {
+ case 0:
+ return new (signed ? Int8Array : Uint8Array)(buffer)
+ case 1:
+ return new (signed ? Int16Array : Uint16Array)(buffer)
+ case 2:
+ return new (signed ? Int32Array : Uint32Array)(buffer)
+ case 3:
+ return new (signed ? BigInt64Array : BigUint64Array)(buffer)
+ }
+ }
+ throw Error('unsupported align: ' + alignLog2)
+ }
+
+ importObject.WebGL.getArrayInfo = id => {
+ const info = WebGL.getInfo(id)
+ if (!(info & (ARRAYBUFFERVIEW | ARRAY | STATICARRAY))) throw Error(`not an array: ${id}, flags=${info}`)
+ return info
+ }
+
+ importObject.WebGL.getValueAlign = info => {
+ return 31 - Math.clz32((info >>> VAL_ALIGN_OFFSET) & 31) // -1 if none
+ }
+
+ importObject.WebGL.getArrayView = arr_ptr => {
+ const U32 = new Uint32Array(WebGL.memory.buffer)
+ const id = U32[(arr_ptr + WebGL.ID_OFFSET) >>> 2]
+
+ const count = U32[WebGL.RTTI_BASE >>> 2]
+
+ if (id >= count) throw Error(`invalid id: ${id}`)
+ const info = U32[((WebGL.RTTI_BASE + 4) >>> 2) + id * 2]
+
+ if (!(info & (WebGL.ARRAYBUFFERVIEW | WebGL.ARRAY | WebGL.STATICARRAY)))
+ throw Error(`not an array: ${id}, flags=${info}`)
+ const align = 31 - Math.clz32((info >>> WebGL.VAL_ALIGN_OFFSET) & 31) // -1 if none getValueAlign(info)
+ let buf = info & WebGL.STATICARRAY ? arr_ptr : U32[(arr_ptr + WebGL.ARRAYBUFFERVIEW_DATASTART_OFFSET) >>> 2]
+ const length =
+ info & WebGL.ARRAY
+ ? U32[(arr_ptr + WebGL.ARRAY_LENGTH_OFFSET) >>> 2]
+ : U32[(buf + WebGL.SIZE_OFFSET) >>> 2] >>> align
+ return WebGL.getView(align, info & WebGL.VAL_SIGNED, info & WebGL.VAL_FLOAT).subarray(
+ (buf >>>= align),
+ buf + length,
+ )
+ }
+
+ importObject.WebGL.getString = string_index => {
+ const buffer = WebGL.memory.buffer
+ const U32 = new Uint32Array(buffer)
+ const id_addr = string_index / 4 - 2
+ const id = U32[id_addr]
+ if (id !== 0x01) throw Error(`not a string index=${string_index} id=${id}`)
+ const len = U32[id_addr + 1]
+ const str = new TextDecoder('utf-16').decode(buffer.slice(string_index, string_index + len))
+ return str
+ }
+
+ importObject.WebGL.createContextFromCanvas = (canvas_id, context_type) => {
+ const canvas = document.getElementById(WebGL.getString(canvas_id))
+ const gl = canvas.getContext(WebGL.getString(context_type))
+ let id = WebGL.contextArray.findIndex(element => element == null)
+
+ if (id == -1) {
+ id = WebGL.contextArray.length
+ WebGL.contextArray.push(gl)
+ } else {
+ WebGL.contextArray[id] = gl
+ }
+ return id
+ }
+
+ importObject.WebGL.getSupportedExtensions = ctx => {
+ alert('getSupportedExtensions is not currently supported')
+ }
+
+ importObject.WebGL.getExtension = (id, name_string) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.getExtension(WebGL.getString(name))
+ }
+
+ importObject.WebGL.activeTexture = (id, texture) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.activeTexture(texture)
+ }
+
+ importObject.WebGL.bindAttribLocation = (id, program, index, name) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.bindAttribLocation(WebGL.programArray[program], index, WebGL.getString(name))
+ }
+
+ importObject.WebGL.bindFramebuffer = (id, target, framebuffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.bindFramebuffer(target, WebGL.framebufferArray[framebuffer])
+ }
+
+ importObject.WebGL.bindRenderbuffer = (id, target, renderbuffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.bindRenderbuffer(target, WebGL.renderbufferArray[renderbuffer])
+ }
+
+ importObject.WebGL.bindTexture = (id, target, texture) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.bindTexture(target, WebGL.textureArray[texture])
+ }
+
+ importObject.WebGL.blendColor = (id, r, g, b, a) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.blendColor(r, g, b, a)
+ }
+
+ importObject.WebGL.blendEquation = (id, mode) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.blendEquation(mode)
+ }
+
+ importObject.WebGL.blendEquationSeparate = (id, modeRGB, modeAlpha) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.blendEquationSeparate(modeRGB, modeAlpha)
+ }
+
+ importObject.WebGL.blendFunc = (id, sfactor, dfactor) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.blendFunc(sfactor, dfactor)
+ }
+
+ importObject.WebGL.blendFuncSeparate = (id, srcRGB, dstRGB, srcAlpha, dstAlpha) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha)
+ }
+
+ // const bufferData = (id, target, data, usage) => {
+ // /** @type {WebGLRenderingContext} */
+ // const self = this.__objectRefs.get(id)
+ // self.bufferData(target, WebGL.getArrayView(data), usage)
+ // }
+
+ importObject.WebGL['bufferData'] = bufferData
+ importObject.WebGL['bufferData'] = bufferData
+ importObject.WebGL['bufferData'] = bufferData
+
+ // LAST TWO PARAMETERS ARE IN WEBGL 2.0
+ importObject.WebGL.bufferSubData = (target, dstByteOffset, srcData, srcOffset, length) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.bufferSubData(target, dstByteOffset, WebGL.getArrayView(srcData), srcOffset, length)
+ }
+
+ importObject.WebGL.checkFramebufferStatus = (id, target) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.checkFramebufferStatus(target)
+ }
+
+ // Specifies a clear value for the stencil buffer
+ importObject.WebGL.clearStencil = (id, s) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.clearStencil(s)
+ }
+
+ // Allows you to turn on and off colors when writing to a framebuffer
+ importObject.WebGL.colorMask = (id, r, g, b, a) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.colorMask(r, g, b, a)
+ }
+
+ // NOTE: Requires extensions
+ // see https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Using_Extensions
+ // Secifies a 2D texture image in a compressed format
+ importObject.WebGL.compressedTexImage2D = (id, target, level, internalformat, width, height, border, data) => {
+ // THIS DOES NOT LOOK RIGHT TO ME
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.compileShader(target, level, internalformat, width, height, border, WebGL.getArrayView(data))
+ }
+
+ // NOTE: Requires extensions
+ // see https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Using_Extensions
+ // Specifies a 2D sub-image rectangle for a compressed format texture image.
+ importObject.WebGL.compressedTexSubImage2D = (
+ ctx,
+ target,
+ level,
+ xoffset,
+ yoffset,
+ width,
+ height,
+ format,
+ data,
+ ) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.compressedTexSubImage2D(target, xoffset, yoffset, width, height, format, WebGL.getArrayView(data))
+ }
+
+ // Copies pixels from the current WebGLFramebuffer into a 2D texture image
+ importObject.WebGL.copyTexImage2D = (id, target, level, internalformat, x, y, width, height, border) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.copyTexImage2D(target, level, internalformat, x, y, width, height, border)
+ }
+
+ // Copies pixels from the current WebGLFramebuffer into an existing 2D texture sub-image
+ importObject.WebGL.copyTexSubImage2D = (id, target, level, xoffset, yoffset, x, y, width, height) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height)
+ }
+
+ // Creates a frame buffer object to be used as a rendering destination
+ importObject.WebGL.createFramebuffer = ctx => {
+ alert(arguments.callee.toString())
+ }
+
+ // Creates a render buffer object that can be used as a source or target for rendering
+ importObject.WebGL.createRenderbuffer = ctx => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+
+ let id = WebGL.renderBufferArray.findIndex(element => element == null)
+ let renderbuffer = self.createRenderbuffer()
+
+ if (id == -1) {
+ id = WebGL.renderBufferArray.length
+ WebGL.renderBufferArray.push(renderbuffer)
+ } else {
+ WebGL.renderBufferArray[id] = renderbuffer
+ }
+ return id
+ }
+
+ // Creates a texture object
+ // Creates a texture object
+ // Creates a texture object
+ // Creates a texture object
+ // Creates a texture object
+ importObject.WebGL.createTexture = ctx => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+
+ let id = WebGL.textureArray.findIndex(element => element == null)
+ let texture = self.createTexture()
+
+ if (id == -1) {
+ id = WebGL.textureArray.length
+ WebGL.textureArray.push(texture)
+ } else {
+ WebGL.textureArray[id] = texture
+ }
+ console.log('createTexture id=' + id)
+ return id
+ }
+
+ // Sets the culling mode
+ importObject.WebGL.cullFace = (id, mode) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.cullFace(target, mode)
+ }
+
+ // delete the buffer object
+ importObject.WebGL.deleteBuffer = (id, buffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.deleteBuffer(this.bufferArray[buffer])
+ this.bufferArray[buffer] = null
+ }
+
+ // delete the frame buffer object
+ importObject.WebGL.deleteFramebuffer = (id, frame_buffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.deleteFramebuffer(this.framebufferArray[frame_buffer])
+ this.framebufferArray[frame_buffer] = null
+ }
+
+ // delete the render buffer object
+ importObject.WebGL.deleteRenderbuffer = (id, render_buffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.deleteRenderbuffer(this.renderBufferArray[render_buffer])
+ this.renderBufferArray[render_buffer] = null
+ }
+
+ // delete the program object
+ importObject.WebGL.deleteProgram = (id, program) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.deleteProgram(this.programArray[program])
+ this.program[program] = null
+ }
+
+ // delete the shader object
+ importObject.WebGL.deleteShader = (id, shader) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.deleteShader(this.shaderArray[shader])
+ this.shaderArray[shader] = null
+ }
+
+ importObject.WebGL.deleteTexture = (id, texture) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.deleteShader(this.textureArray[texture])
+ this.textureArray[texture] = null
+ }
+
+ // enable or disable writing to the depth buffer
+ importObject.WebGL.depthMask = (id, flag) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.depthMask(flag)
+ }
+
+ // defines the near and far clipping plane in the depth buffer
+ importObject.WebGL.depthRange = (id, zNear, zFar) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.depthRange(zNear, zFar)
+ }
+
+ // detach the shader currently attached to the program
+ importObject.WebGL.detachShader = (id, program, shader) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.detachShader(program, shader)
+ }
+
+ // disable a specific WebGL capability
+ importObject.WebGL.disable = (id, cap) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.disable(cap)
+ }
+
+ // disables a vertex attribute array at the index loction passed in.
+ importObject.WebGL.disableVertexAttribArray = (id, index) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.disableVertexAttribArray(index)
+ }
+
+ // uses index data to render elements from array data
+ importObject.WebGL.drawElements = (id, mode, count, typ, offset) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.drawElements(mode, count, typ, offset)
+ }
+
+ // waits for all previously executed WebGL api calls to finish
+ importObject.WebGL.finish = ctx => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.finish()
+ }
+
+ // ???
+ importObject.WebGL.flush = ctx => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.flush()
+ }
+
+ // attach a render buffer to a frame buffer
+ importObject.WebGL.framebufferRenderbuffer = (id, target, attachment, renderbuffertarget, renderbuffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer)
+ }
+
+ importObject.WebGL.framebufferTexture2D = (id, target, attachment, textarget, texture, level) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.framebufferTexture2D(target, attachment, textarget, texture, level)
+ }
+
+ // set the winding direction of the verticies, which defines the front face
+ importObject.WebGL.frontFace = (id, mode) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.frontFace(mode)
+ }
+
+ // generates reduced resolution mipmap textures for rendering objects at a distance
+ importObject.WebGL.generateMipmap = (id, target) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.generateMipmap(target)
+ }
+
+ // query information about an attribute of a given program
+ importObject.WebGL.getActiveAttrib = (id, program, index) => {
+ // will this return an externref? How do I move in the data
+ alert('getActiveAttrib is not implemented')
+ return 0
+ }
+
+ // query information about a uniform in a given program
+ importObject.WebGL.getActiveUniform = (id, program, index) => {
+ // will this return an externref? How do I move in the data
+ alert('getActiveUniform is not implemented')
+ return 0
+ }
+
+ // needs to return an array of WebGL shaders to the AS
+ importObject.WebGL.getAttachedShaders = (id, program) => {
+ // this will need to return an array of shader indicies.
+ alert('getAttachedShaders is not implemented')
+ return 0
+ }
+
+ // returns an int given a buffer parameter name
+ importObject.WebGL.getBufferParameter = (id, target, pname) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.getBufferParameter(target, pname)
+ }
+
+ importObject.WebGL.getParameter = (id, pname) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.getParameter(pname)
+ }
+
+ importObject.WebGL.getError = ctx => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.getError()
+ }
+
+ importObject.WebGL.getFramebufferAttachmentParameter = (id, target, attachment, pname) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.getParameter(target, attachment, pname)
+ }
+
+ importObject.WebGL.getProgramInfoLog = (id, program) => {
+ // this needs to return a string to the AS
+ alert('getProgramInfoLog not implemented')
+ return 0
+ }
+
+ // get information about the renderbuffer
+ importObject.WebGL.getRenderbufferParameter = (id, target, pname) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.getRenderbufferParameter(target, pname)
+ }
+
+ importObject.WebGL.getShaderParameter = (id, shader, pname) => {
+ alert('getShaderParameter not implemented')
+ return 0
+ }
+
+ importObject.WebGL.getShaderPrecisionFormat = (id, shadertype, precisiontype) => {
+ alert('getShaderPrecisionFormat not implemented')
+ return 0
+ }
+
+ importObject.WebGL.getShaderInfoLog = (id, shader) => {
+ alert('getShaderInfoLog not implemented')
+ return 0
+ }
+
+ importObject.WebGL.getShaderSource = (id, shader) => {
+ // this needs to return a string to AS
+ alert('getShaderInfoLog not implemented')
+ return 0
+ }
+
+ importObject.WebGL.getTexParameter = (id, target, pname) => {
+ alert('getTexParameter not implemented')
+ return 0
+ }
+
+ importObject.WebGL.getUniform = (id, program, location) => {
+ // this can return multiple types
+ alert('getUniform not implemented')
+ return 0
+ }
+
+ importObject.WebGL.getVertexAttrib = (id, index, pname) => {
+ // this can return multiple types
+ alert('getVertexAttrib not implemented')
+ return 0
+ }
+
+ // given a vertex attribute index, return the offset value
+ importObject.WebGL.getVertexAttribOffset = (id, index, pname) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.getVertexAttribOffset(index, pname)
+ }
+
+ // sets shader behaviorial hints, which could potentially improve performance on some implementations
+ importObject.WebGL.hint = (id, target, mode) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.hint(target, mode)
+ }
+
+ // THIS MAY JUST NEED TO CHECK TO SEE IF THE NUMBER IS IN THE RENDERBUFFER ARRAY
+ // THERE ARE SEVERAL OF THESE isX FUNCTIONS. I'M NOT SURE IF ANY OF THEM ARE USEFUL
+ // IN THE AS CODE
+ importObject.WebGL.isBuffer = (id, buffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.isBuffer(WebGL.bufferArray[buffer])
+ }
+
+ // tests a WebGL capability to see if it is enabled
+ importObject.WebGL.isEnabled = (id, cap) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.isEnabled(cap)
+ }
+
+ importObject.WebGL.isFramebuffer = (id, framebuffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.isFramebuffer(WebGL.frameBufferArray[framebuffer])
+ }
+
+ importObject.WebGL.isProgram = (id, program) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.isProgram(WebGL.programArray[program])
+ }
+
+ importObject.WebGL.isRenderbuffer = (id, renderbuffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.isRenderbuffer(WebGL.renderBufferArray[renderbuffer])
+ }
+
+ importObject.WebGL.isShader = (id, shader) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.isShader(WebGL.shaderArray[shader])
+ }
+
+ importObject.WebGL.isTexture = (id, texture) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.isTexture(WebGL.textureArray[texture])
+ }
+
+ importObject.WebGL.lineWidth = (id, width) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.lineWidth(width)
+ }
+
+ // set pixel storage mode
+ importObject.WebGL.pixelStorei = (id, pname, param) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.pixelStorei(pname, param)
+ }
+
+ // ???
+ importObject.WebGL.polygonOffset = (id, factor, units) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.polygonOffset(factor, units)
+ }
+
+ // read a block of pixels into an array buffer view
+ importObject.WebGL.readPixels = (id, x, y, width, height, format, typ, pixels) => {
+ alert('readPixels not implemented')
+ }
+
+ // create and initialize a renderbuffer object's data store
+ importObject.WebGL.renderbufferStorage = (id, target, internalformat, width, height) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.renderbufferStorage(target, internalformat, width, height)
+ }
+
+ // sampling for anti-aliasing. SAMPLE_COVERAGE must be enabled.
+ importObject.WebGL.sampleCoverage = (id, value, invert) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.sampleCoverage(value, invert)
+ }
+
+ // create a scissor box to draw inside. SCISSOR_TEST must be enabled.
+ importObject.WebGL.scissor = (id, x, y, width, height) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.scissor(x, y, width, height)
+ }
+
+ // sets a function for allowing pixels to pass through a stencil. STENCIL_TEST must be set.
+ importObject.WebGL.stencilFunc = (id, func, ref, mask) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.stencilFunc(func, ref, mask)
+ }
+
+ // allows you to set different stencils for front and back faces.
+ importObject.WebGL.stencilFuncSeparate = (id, face, func, ref, mask) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.stencilFuncSeparate(face, func, ref, mask)
+ }
+
+ // defines stencil masking bits
+ importObject.WebGL.stencilMask = (id, mask) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.stencilMask(mask)
+ }
+
+ // use different stencil mask for front and back faces
+ importObject.WebGL.stencilMaskSeparate = (id, face, mask) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.stencilMaskSeparate(face, mask)
+ }
+
+ // PROBLEM: zfail is a function
+ importObject.WebGL.stencilOp = (id, fail, zfail, zpass) => {
+ alert('stencilOp is not implemented')
+ }
+
+ // PROBLEM: zfail is a function
+ importObject.WebGL.stencilOpSeparate = (id, face, fail, zfail, zpass) => {
+ alert('stencilOpSeparate is not implemented')
+ }
+
+ // specify a two-dimensional texture image
+ importObject.WebGL.texImage2D = (id, target, level, internalformat, format, typ, image_id) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.texImage2D(target, level, internalformat, format, typ, WebGL.imageArray[image_id]) //WebGL.getArrayView(pixels));
+ }
+
+ importObject.WebGL.texParameterf = (id, target, pname, param) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.texParameterf(target, pname, param)
+ }
+
+ importObject.WebGL.texParameteri = (id, target, pname, param) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.texParameteri(target, pname, param)
+ }
+
+ importObject.WebGL.texSubImage2D = (id, target, level, xoffset, yoffset, width, height, format, typ, pixels) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.texSubImage2D(target, level, xoffset, yoffset, width, height, format, typ, WebGL.getArrayView(pixels))
+ }
+
+ importObject.WebGL.uniform1f = (id, location, x) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform1f(WebGL.uniformLocationArray[location], x)
+ }
+
+ importObject.WebGL.uniform1fv = (id, location, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform1fv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.uniform1i = (id, location, x) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform1i(WebGL.uniformLocationArray[location], x)
+ }
+
+ importObject.WebGL.uniform1iv = (id, location, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform1iv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.uniform2f = (id, location, x, y) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform2f(WebGL.uniformLocationArray[location], x, y)
+ }
+
+ importObject.WebGL.uniform2fv = (id, location, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform2fv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.uniform2i = (id, location, x, y) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform2i(WebGL.uniformLocationArray[location], x, y)
+ }
+
+ importObject.WebGL.uniform2iv = (id, location, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform2iv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.uniform3f = (id, location, x, y, z) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform3f(WebGL.uniformLocationArray[location], x, y, z)
+ }
+
+ importObject.WebGL.uniform3fv = (id, location, v) => {
+ //Float32Array
+ // /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform3fv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v))
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform3fv(WebGL.uniformLocationArray[location], new Float32Array(v))
+ }
+
+ importObject.WebGL.uniform3i = (id, location, x, y, z) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform3i(WebGL.uniformLocationArray[location], x, y, z)
+ }
+
+ importObject.WebGL.uniform3iv = (id, location, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform3iv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.uniform4f = (id, location, x, y, z, w) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform4f(WebGL.uniformLocationArray[location], x, y, z, w)
+ }
+
+ importObject.WebGL.uniform4fv = (id, location, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform4fv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.uniform4i = (id, location, x, y, z, w) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform4i(WebGL.uniformLocationArray[location], x, y, z, w)
+ }
+
+ importObject.WebGL.uniform4iv = (id, location, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniform4iv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v))
+ }
+
+ // Assumes an f32 as GLfloat
+ importObject.WebGL.uniformMatrix2fv = (id, location, transpose, value_arr) => {
+ const buffer = WebGL.memory.buffer
+ let start_pos = value_arr >> 2
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.uniformMatrix3fv(
+ WebGL.uniformLocationArray[location],
+ transpose,
+ new Float32Array(buffer).subarray(start_pos, start_pos + 4),
+ )
+ }
+
+ // this assumes f32 as GLfloat
+ importObject.WebGL.uniformMatrix3fv = (id, location, transpose, value_arr) => {
+ const buffer = WebGL.memory.buffer
+ let start_pos = value_arr >> 2
+
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+
+ return self.uniformMatrix3fv(
+ WebGL.uniformLocationArray[location],
+ transpose,
+ new Float32Array(buffer).subarray(start_pos, start_pos + 9),
+ )
+ }
+
+ importObject.WebGL.validateProgram = (id, program) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.validateProgram(WebGL.programArray[program])
+ }
+
+ importObject.WebGL.vertexAttrib1f = (id, indx, x) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttrib1f(indx, x)
+ }
+
+ importObject.WebGL.vertexAttrib1fv = (id, indx, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttrib1fv(indx, WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.vertexAttrib2f = (id, indx, x, y) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttrib2f(indx, x, y)
+ }
+
+ importObject.WebGL.vertexAttrib2fv = (id, indx, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttrib2fv(indx, WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.vertexAttrib3f = (id, indx, x, y, z) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttrib3f(indx, x, y, z)
+ }
+
+ importObject.WebGL.vertexAttrib3fv = (id, indx, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttrib3fv(indx, WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.vertexAttrib4f = (id, indx, x, y, z, w) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttrib4f(indx, x, y, z, w)
+ }
+
+ importObject.WebGL.vertexAttrib4fv = (id, indx, v) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttrib4fv(indx, WebGL.getArrayView(v))
+ }
+
+ importObject.WebGL.viewport = (id, indx, x, y, width, height) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.viewport(indx, x, y, width, height)
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.copyBufferSubData = (id, readTarget, writeTarget, readOffset, writeOffset, size) => {
+ alert('copyBufferSubData not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getBufferSubData = (id, target, srcByteOffset, dstBuffer, dstOffset, length) => {
+ alert('getBufferSubData not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.blitFramebuffer = (
+ ctx,
+ srcX0,
+ srcY0,
+ srcX1,
+ srcY1,
+ dstX0,
+ dstY0,
+ dstX1,
+ dstY1,
+ mask,
+ filter,
+ ) => {
+ alert('blitFramebuffer not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.framebufferTextureLayer = (id, target, attachment, texture, level, layer) => {
+ alert('framebufferTextureLayer not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.invalidateFramebuffer = (id, target, attachments) => {
+ alert('invalidateFramebuffer not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.invalidateSubFramebuffer = (id, target, attachments, x, y, width, height) => {
+ alert('invalidateSubFramebuffer not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.readBuffer = (id, src) => {
+ alert('readBuffer not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getInternalformatParameter = (id, target, internalformat, pname) => {
+ alert('getInternalformatParameter not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.renderbufferStorageMultisample = (id, target, samples, internalformat, width, height) => {
+ alert('renderbufferStorageMultisample not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.texStorage2D = (id, target, levels, internalformat, width, height) => {
+ alert('texStorage2D not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.texStorage3D = (id, target, levels, internalformat, width, height, depth) => {
+ alert('texStorage3D not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.texSubImage3D = (
+ ctx,
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ typ,
+ pboOffset,
+ ) => {
+ alert('texSubImage3D not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.copyTexSubImage3D = (id, target, level, xoffset, yoffset, zoffset, x, y, width, height) => {
+ alert('copyTexSubImage3D not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.compressedTexImage3D = (
+ ctx,
+ target,
+ level,
+ internalformat,
+ width,
+ height,
+ depth,
+ border,
+ imageSize,
+ offset,
+ ) => {
+ alert('compressedTexImage3D not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.compressedTexSubImage3D = (
+ ctx,
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ imageSize,
+ offset,
+ ) => {
+ alert('compressedTexSubImage3D not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getFragDataLocation = (id, program, name) => {
+ alert('getFragDataLocation not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform1ui = (id, location, v0) => {
+ alert('uniform1ui not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform2ui = (id, location, v0, v1) => {
+ alert('uniform2ui not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform3ui = (id, location, v0, v1, v3) => {
+ alert('uniform3ui not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform4ui = (id, location, v0, v1, v3, v4) => {
+ alert('uniform4ui not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform1uiv = (id, location, data, srcOffset, srcLength) => {
+ alert('uniform1uiv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform2uiv = (id, location, data, srcOffset, srcLength) => {
+ alert('uniform2uiv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform3uiv = (id, location, data, srcOffset, srcLength) => {
+ alert('uniform3uiv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform4uiv = (id, location, data, srcOffset, srcLength) => {
+ alert('uniform4uiv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix3x2fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ alert('uniformMatrix3x2fv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix4x2fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ alert('uniformMatrix4x2fv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix2x3fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ alert('uniformMatrix2x3fv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix4x3fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ alert('uniformMatrix4x3fv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix2x4fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ console.trace('uniformMatrix2x4fv')
+ alert('uniformMatrix2x4fv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix3x4fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ console.trace('uniformMatrix3x4fv')
+ alert('uniformMatrix3x4fv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribI4i = (id, index, x, y, z, w) => {
+ console.trace('vertexAttribI4i')
+ alert('vertexAttribI4i not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribI4iv = (id, index, value_arr) => {
+ console.trace('vertexAttribI4iv')
+ alert('vertexAttribI4iv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribI4ui = (id, index, x, y, z, w) => {
+ console.trace('vertexAttribI4ui')
+ alert('vertexAttribI4ui not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribI4uiv = (id, index, value_arr) => {
+ console.trace('vertexAttribI4uiv')
+ alert('vertexAttribI4uiv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribIPointer = (id, index, size, typ, stride, offset) => {
+ console.trace('vertexAttribIPointer')
+ alert('vertexAttribIPointer not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribDivisor = (id, index, divisor) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.vertexAttribDivisor(index, divisor)
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.drawArraysInstanced = (id, mode, first, count, instanceCount) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.drawArraysInstanced(mode, first, count, instanceCount)
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.drawElementsInstanced = (id, mode, count, typ, offset, instanceCount) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ return self.drawArraysInstanced(mode, count, typ, offset, instanceCount)
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.drawRangeElements = (id, mode, start, end, count, typ, offset) => {
+ alert('drawRangeElements not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.drawBuffers = (id, buffers) => {
+ alert('drawBuffers not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clearBufferfv = (id, buffer, drawbuffer, values, srcOffset) => {
+ alert('clearBufferfv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clearBufferiv = (id, buffer, drawbuffer, values, srcOffset) => {
+ alert('clearBufferiv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clearBufferuiv = (id, buffer, drawbuffer, values, srcOffset) => {
+ alert('clearBufferuiv not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clearBufferfi = (id, buffer, drawbuffer, depth, stencil) => {
+ alert('clearBufferfi not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.createQuery = ctx => {
+ alert('createQuery not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteQuery = (id, query) => {
+ alert('deleteQuery not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isQuery = (id, query) => {
+ alert('isQuery not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.beginQuery = (id, target, query) => {
+ alert('beginQuery not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.endQuery = (id, query) => {
+ alert('endQuery not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getQuery = (id, query, pname) => {
+ alert('getQuery not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getQueryParameter = (id, query, pname) => {
+ alert('getQueryParameter not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.createSampler = ctx => {
+ alert('createSampler not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteSampler = (id, sampler) => {
+ alert('deleteSampler not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isSampler = (id, sampler) => {
+ alert('isSampler not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindSampler = (id, uint, sampler) => {
+ alert('bindSampler not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.samplerParameteri = (id, sampler, pname, param) => {
+ alert('samplerParameteri not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.samplerParameterf = (id, sampler, pname, param) => {
+ alert('samplerParameterf not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getSamplerParameter = (id, sampler, pname) => {
+ alert('getSamplerParameter not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.fenceSync = (id, condition, flags) => {
+ alert('fenceSync not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isSync = (id, sync) => {
+ alert('isSync not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteSync = (id, sync) => {
+ alert('deleteSync not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clientWaitSync = (id, sync, flags, timeout) => {
+ alert('clientWaitSync not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.waitSync = (id, sync, flags, timeout) => {
+ alert('waitSync not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getSyncParameter = (id, sync, pname) => {
+ alert('getSyncParameter not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.createTransformFeedback = ctx => {
+ alert('createTransformFeedback not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteTransformFeedback = (id, tf) => {
+ alert('deleteTransformFeedback not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isTransformFeedback = (id, tf) => {
+ alert('isTransformFeedback not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindTransformFeedback = (id, target, tf) => {
+ alert('bindTransformFeedback not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.beginTransformFeedback = (id, primitiveMode) => {
+ alert('beginTransformFeedback not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.endTransformFeedback = ctx => {
+ alert('endTransformFeedback not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.transformFeedbackVaryings = (id, program, varyings, bufferMode) => {
+ alert('transformFeedbackVaryings not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getTransformFeedbackVarying = (id, program, index) => {
+ alert('getTransformFeedbackVarying not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.pauseTransformFeedback = ctx => {
+ alert('pauseTransformFeedback not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.resumeTransformFeedback = ctx => {
+ alert('resumeTransformFeedback not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindBufferBase = (id, target, index, buffer) => {
+ alert('bindBufferBase not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindBufferRange = (id, target, index, buffer, offset, size) => {
+ alert('bindBufferRange not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getIndexedParameter = (id, target, index) => {
+ alert('getIndexedParameter not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getUniformIndices = (id, program, uniformNames) => {
+ alert('getUniformIndices not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getActiveUniforms = (id, program, uniformIndices, pname) => {
+ alert('getActiveUniforms not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getUniformBlockIndex = (id, program, uniformBlockName) => {
+ alert('getUniformBlockIndex not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getActiveUniformBlockParameter = (id, program, uniformBlockIndex, pname) => {
+ alert('getActiveUniformBlockParameter not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getActiveUniformBlockName = (id, program, uniformBlockIndex) => {
+ alert('getActiveUniformBlockName not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformBlockBinding = (id, program, uniformBlockIndex, uniformBlockBinding) => {
+ alert('uniformBlockBinding not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.createVertexArray = ctx => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+
+ let id = WebGL.vaoArray.findIndex(element => element == null)
+ let vao = self.createVertexArray()
+
+ if (id == -1) {
+ id = WebGL.vaoArray.length
+ WebGL.vaoArray.push(vao)
+ } else {
+ WebGL.vaoArray[id] = vao
+ }
+ return id
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteVertexArray = (id, vertexArray) => {
+ alert('deleteVertexArray not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isVertexArray = (id, vertexArray) => {
+ alert('isVertexArray not implemented (expiramental)')
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindVertexArray = (id, vaoId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.bindVertexArray(WebGL.vaoArray[vaoId])
+ }
+}
diff --git a/aswebglue/ASWebGLue2.d.ts b/aswebglue/ASWebGLue2.d.ts
new file mode 100644
index 0000000..5dc66c3
--- /dev/null
+++ b/aswebglue/ASWebGLue2.d.ts
@@ -0,0 +1,3 @@
+export declare function print(str: string): void;
+export declare function ASWebGLReady(wasm_obj: object, importObject: object): void;
+export declare function initASWebGLue(importObject: object): void;
diff --git a/aswebglue/ASWebGLue2.js b/aswebglue/ASWebGLue2.js
new file mode 100644
index 0000000..6fc60d2
--- /dev/null
+++ b/aswebglue/ASWebGLue2.js
@@ -0,0 +1,2239 @@
+export function ASWebGLReady(wasm_obj, importObject) {
+ console.log("ASWebGLReady");
+ if (wasm_obj == null) {
+ console.error("ASWebGLReady requires the WebAssembly Instance as 1st parameter");
+ return;
+ }
+ if (wasm_obj == null) {
+ console.error("ASWebGLReady requires import object as 2nd parameter");
+ return;
+ }
+ importObject.WebGL.WEBGL_READY = true;
+ console.log("=========================");
+ console.log(wasm_obj.instance.exports);
+ console.log(wasm_obj.instance.exports["__rtti_base"]);
+ importObject.WebGL.RTTI_BASE = wasm_obj.instance.exports["__rtti_base"];
+}
+
+export function initASWebGLue(importObject) {
+ if (importObject.env.memory == null) {
+ alert('You need to set memory in your importObject');
+ }
+
+ if (importObject.WebGL == null) {
+ importObject.WebGL = {};
+ }
+
+ const WebGL = importObject.WebGL;
+
+ importObject.env.abort = (...args) => {
+ console.log("abort");
+ console.log(WebGL.getString(args[0]));
+ }
+
+
+ importObject.WebGL.WEBGL_READY = false;
+ importObject.WebGL.memory = importObject.env.memory;
+
+ importObject.WebGL.contextArray = [];
+ importObject.WebGL.textureArray = [];
+ importObject.WebGL.imageArray = [];
+ importObject.WebGL.programArray = [];
+ importObject.WebGL.shaderArray = [];
+ importObject.WebGL.bufferArray = [];
+ importObject.WebGL.frameBufferArray = [];
+ importObject.WebGL.renderBufferArray = [];
+ importObject.WebGL.uniformLocationArray = [];
+ importObject.WebGL.vaoArray = [];
+
+ importObject.WebGL.SIZE_OFFSET = -4;
+ importObject.WebGL.ID_OFFSET = -8;
+ importObject.WebGL.CHUNKSIZE = 1024;
+ importObject.WebGL.STRING_ID = 1;
+ importObject.WebGL.RTTI_BASE = 0;
+ importObject.WebGL.VAL_ALIGN_OFFSET = 6;
+
+ importObject.ARRAYBUFFERVIEW_DATASTART_OFFSET = 4;
+ importObject.ARRAY_LENGTH_OFFSET = 12;
+
+ /** No specific flags. */
+ importObject.WebGL.NONE = 0x00;
+ /** Type is an `ArrayBufferView`. */
+ importObject.WebGL.ARRAYBUFFERVIEW = 0x01;
+ /** Type is an `Array`. */
+ importObject.WebGL.ARRAY = 0x0002;
+ /** Type is a `StaticArray`. */
+ importObject.WebGL.STATICARRAY = 0x0004;
+ /** Type is a `Set`. */
+ importObject.WebGL.SET = 0x000008;
+ /** Type is a `Map`. */
+ importObject.WebGL.MAP = 0x000010;
+ /** Type is inherently acyclic. */
+ importObject.WebGL.ACYCLIC = 0x000020;
+ /** Value alignment of 1 byte. */
+ importObject.WebGL.VALUE_ALIGN_0 = 0x000040;
+ /** Value alignment of 2 bytes. */
+ importObject.WebGL.VALUE_ALIGN_1 = 0x000080;
+ /** Value alignment of 4 bytes. */
+ importObject.WebGL.VALUE_ALIGN_2 = 0x000100;
+ /** Value alignment of 8 bytes. */
+ importObject.WebGL.VALUE_ALIGN_3 = 0x000200;
+ /** Value alignment of 16 bytes. */
+ importObject.WebGL.VALUE_ALIGN_4 = 0x000400;
+ /** Value is a signed type. */
+ importObject.WebGL.VALUE_SIGNED = 0x000800;
+ /** Value is a float type. */
+ importObject.WebGL.VALUE_FLOAT = 0x001000;
+ /** Value type is nullable. */
+ importObject.WebGL.VALUE_NULLABLE = 0x002000;
+ /** Value type is managed. */
+ importObject.WebGL.VALUE_MANAGED = 0x004000;
+ /** Key alignment of 1 byte. */
+ importObject.WebGL.KEY_ALIGN_0 = 0x008000;
+ /** Key alignment of 2 bytes. */
+ importObject.WebGL.KEY_ALIGN_1 = 0x010000;
+ /** Key alignment of 4 bytes. */
+ importObject.WebGL.KEY_ALIGN_2 = 0x020000;
+ /** Key alignment of 8 bytes. */
+ importObject.WebGL.KEY_ALIGN_3 = 0x040000;
+ /** Key alignment of 16 bytes. */
+ importObject.WebGL.KEY_ALIGN_4 = 0x080000;
+ /** Key is a signed type. */
+ importObject.WebGL.KEY_SIGNED = 0x100000;
+ /** Key is a float type. */
+ importObject.WebGL.KEY_FLOAT = 0x200000;
+ /** Key type is nullable. */
+ importObject.WebGL.KEY_NULLABLE = 0x400000;
+ /** Key type is managed. */
+ importObject.WebGL.KEY_MANAGED = 0x800000;
+
+ //imageArray
+ importObject.WebGL.createImage = (image_location) => {
+ console.log(`createImage(${image_location})`);
+ let image = new Image();
+ image.ready = false;
+ image.onload = function () {
+ image.ready = true;
+ }
+ image.src = WebGL.getString(image_location);
+ console.log(`image.src=${image.src}`);
+ let image_id = WebGL.imageArray.length;
+ WebGL.imageArray.push(image);
+ return image_id;
+ }
+
+ // DEBUG STUFF -----------
+
+ importObject.WebGL.logi32 = (arg) => {
+ console.log(`logi32=${arg}`);
+ }
+
+ importObject.WebGL.logf32 = (arg) => {
+ console.log(`logf32=${arg}`);
+ }
+
+ // END DEBUG STUFF --------
+
+ importObject.WebGL.imageReady = (image_id) => {
+ console.log("image ready check! image_id=" + image_id);
+ if (WebGL.imageArray.length <= image_id) {
+ return false;
+ }
+ return WebGL.imageArray[image_id].ready;
+ }
+
+ importObject.WebGL.getView = (alignLog2, signed, float) => {
+ const buffer = WebGL.memory.buffer;
+
+ if (float) {
+ switch (alignLog2) {
+ case 2: return new Float32Array(buffer);
+ case 3: return new Float64Array(buffer);
+ }
+ } else {
+ switch (alignLog2) {
+ case 0: return new (signed ? Int8Array : Uint8Array)(buffer);
+ case 1: return new (signed ? Int16Array : Uint16Array)(buffer);
+ case 2: return new (signed ? Int32Array : Uint32Array)(buffer);
+ case 3: return new (signed ? BigInt64Array : BigUint64Array)(buffer);
+ }
+ }
+ throw Error("unsupported align: " + alignLog2);
+ }
+
+ importObject.WebGL.getArrayInfo = (id) => {
+ const info = WebGL.getInfo(id);
+ if (!(info & (ARRAYBUFFERVIEW | ARRAY | STATICARRAY))) throw Error(`not an array: ${id}, flags=${info}`);
+ return info;
+ }
+
+ importObject.WebGL.getValueAlign = (info) => {
+ return 31 - Math.clz32((info >>> VAL_ALIGN_OFFSET) & 31); // -1 if none
+ }
+
+ importObject.WebGL.getArrayView = (arr_ptr) => {
+ const U32 = new Uint32Array(WebGL.memory.buffer);
+ const id = U32[arr_ptr + WebGL.ID_OFFSET >>> 2];
+
+ const count = U32[WebGL.RTTI_BASE >>> 2];
+
+ if (id >= count) throw Error(`invalid id: ${id}`);
+ const info = U32[(WebGL.RTTI_BASE + 4 >>> 2) + id * 2];
+
+ if (!(info & (WebGL.ARRAYBUFFERVIEW | WebGL.ARRAY | WebGL.STATICARRAY))) throw Error(`not an array: ${id}, flags=${info}`);
+ const align = 31 - Math.clz32((info >>> WebGL.VAL_ALIGN_OFFSET) & 31); // -1 if none getValueAlign(info)
+ let buf = info & WebGL.STATICARRAY
+ ? arr_ptr
+ : U32[arr_ptr + WebGL.ARRAYBUFFERVIEW_DATASTART_OFFSET >>> 2];
+ const length = info & WebGL.ARRAY
+ ? U32[arr_ptr + WebGL.ARRAY_LENGTH_OFFSET >>> 2]
+ : U32[buf + WebGL.SIZE_OFFSET >>> 2] >>> align;
+ return WebGL.getView(align, info & WebGL.VAL_SIGNED, info & WebGL.VAL_FLOAT)
+ .subarray(buf >>>= align, buf + length);
+
+ }
+
+ importObject.WebGL.getString = (string_index) => {
+ const buffer = WebGL.memory.buffer;
+ const U32 = new Uint32Array(buffer);
+ const id_addr = string_index / 4 - 2;
+ const id = U32[id_addr];
+ if (id !== 0x01) throw Error(`not a string index=${string_index} id=${id}`);
+ const len = U32[id_addr + 1];
+ const str = new TextDecoder('utf-16').decode(buffer.slice(string_index, string_index + len));
+ return str;
+ }
+
+ importObject.WebGL.createContextFromCanvas = (canvas_id, context_type) => {
+ const canvas = document.getElementById(WebGL.getString(canvas_id));
+ const gl = canvas.getContext(WebGL.getString(context_type));
+ let id = WebGL.contextArray.findIndex((element) => element == null);
+
+ if (id == -1) {
+ id = WebGL.contextArray.length;
+ WebGL.contextArray.push(gl);
+ }
+ else {
+ WebGL.contextArray[id] = gl;
+ }
+ return id;
+ }
+ /*
+ importObject.WebGL.activateTexture = (id, texture) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.activateTexture(WebGL.textureArray[texture]);
+ }
+ */
+
+ importObject.WebGL.getSupportedExtensions = (ctx) => {
+ alert('getSupportedExtensions is not currently supported');
+ }
+
+ importObject.WebGL.getExtension = (id, name_string) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getExtension(WebGL.getString(name));
+ }
+
+ importObject.WebGL.activeTexture = (id, texture) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.activeTexture(texture);
+ }
+
+ importObject.WebGL.attachShader = (id, program, shader) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.attachShader(WebGL.programArray[program], WebGL.shaderArray[shader]);
+ }
+
+ importObject.WebGL.bindAttribLocation = (id, program, index, name) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.bindAttribLocation(WebGL.programArray[program], index, WebGL.getString(name));
+ }
+
+ importObject.WebGL.bindBuffer = (id, target, buffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.bindBuffer(target, WebGL.bufferArray[buffer]);
+ }
+
+ importObject.WebGL.bindFramebuffer = (id, target, framebuffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.bindFramebuffer(target, WebGL.framebufferArray[framebuffer]);
+ }
+
+ importObject.WebGL.bindRenderbuffer = (id, target, renderbuffer) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.bindRenderbuffer(target, WebGL.renderbufferArray[renderbuffer]);
+ }
+
+ importObject.WebGL.bindTexture = (id, target, texture) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.bindTexture(target, WebGL.textureArray[texture]);
+ }
+
+ importObject.WebGL.blendColor = (id, r, g, b, a) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.blendColor(r, g, b, a);
+ }
+
+ importObject.WebGL.blendEquation = (id, mode) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.blendEquation(mode);
+ }
+
+ importObject.WebGL.blendEquationSeparate = (id, modeRGB, modeAlpha) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.blendEquationSeparate(modeRGB, modeAlpha);
+ }
+
+ importObject.WebGL.blendFunc = (id, sfactor, dfactor) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.blendFunc(sfactor, dfactor);
+ }
+
+ importObject.WebGL.blendFuncSeparate = (id, srcRGB, dstRGB, srcAlpha, dstAlpha) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+ }
+
+ const bufferdata = (id, target, data, usage) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.bufferData(target, WebGL.getArrayView(data), usage);
+ }
+
+ importObject.WebGL["bufferData"] = bufferdata;
+ importObject.WebGL["bufferData"] = bufferdata;
+ importObject.WebGL["bufferData"] = bufferdata;
+
+ // LAST TWO PARAMETERS ARE IN WEBGL 2.0
+ importObject.WebGL.bufferSubData = (target, dstByteOffset, srcData, srcOffset, length) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.bufferSubData(target, dstByteOffset, WebGL.getArrayView(srcData), srcOffset, length);
+ }
+
+ importObject.WebGL.checkFramebufferStatus = (id, target) => {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.checkFramebufferStatus(target);
+ }
+
+ // Clears the color, depth and stencil buffers
+ importObject.WebGL.clear = (id, mask) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.clear(mask);
+ }
+
+ // Specify the color fill a cleared color buffer with
+ importObject.WebGL.clearColor = (id, r, g, b, a) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.clearColor(r, g, b, a);
+ }
+
+ // Specifies a depth value to fill the depth buffer when it is cleared
+ importObject.WebGL.clearDepth = (id, depth) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.clearDepth(depth);
+ }
+
+ // Specifies a clear value for the stencil buffer
+ importObject.WebGL.clearStencil = (id, s) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.clearStencil(s);
+ }
+
+ // Allows you to turn on and off colors when writing to a framebuffer
+ importObject.WebGL.colorMask = (id, r, g, b, a) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.colorMask(r, g, b, a);
+ }
+
+ // Compiles a GLSL shader to be used by a WebGL program.
+ importObject.WebGL.compileShader = (id, shader) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.compileShader(WebGL.shaderArray[shader]);
+ var compilationLog = /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getShaderInfoLog(WebGL.shaderArray[shader]);
+ console.log(compilationLog);
+ }
+
+ // NOTE: Requires extensions
+ // see https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Using_Extensions
+ // Secifies a 2D texture image in a compressed format
+ importObject.WebGL.compressedTexImage2D = (id, target, level, internalformat, width, height, border, data) => {
+ // THIS DOES NOT LOOK RIGHT TO ME
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.compileShader(target, level, internalformat,
+ width, height, border, WebGL.getArrayView(data));
+ }
+
+ // NOTE: Requires extensions
+ // see https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Using_Extensions
+ // Specifies a 2D sub-image rectangle for a compressed format texture image.
+ importObject.WebGL.compressedTexSubImage2D = (id, target, level, xoffset, yoffset, width, height, format, data) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.compressedTexSubImage2D(target, xoffset, yoffset, width, height, format,
+ WebGL.getArrayView(data));
+ }
+
+ // Copies pixels from the current WebGLFramebuffer into a 2D texture image
+ importObject.WebGL.copyTexImage2D = (id, target, level, internalformat, x, y, width, height, border) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.copyTexImage2D(target, level, internalformat, x, y, width, height, border);
+ }
+
+ // Copies pixels from the current WebGLFramebuffer into an existing 2D texture sub-image
+ importObject.WebGL.copyTexSubImage2D = (id, target, level, xoffset, yoffset, x, y, width, height) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+ }
+
+ // Creates a buffer to hold vertex related data
+ importObject.WebGL.createBuffer = (ctx) => {
+ let id = WebGL.bufferArray.findIndex((element) => element == null);
+ let buffer = /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.createBuffer();
+
+ if (id == -1) {
+ id = WebGL.bufferArray.length;
+ WebGL.bufferArray.push(buffer);
+ }
+ else {
+ WebGL.bufferArray[id] = buffer;
+ }
+ return id;
+ }
+
+ // Creates a frame buffer object to be used as a rendering destination
+ importObject.WebGL.createFramebuffer = (ctx) => {
+ alert(arguments.callee.toString());
+ }
+
+ // Creates a WebGL program that consists of a vertex and fragment shader
+ importObject.WebGL.createProgram = (ctx) => {
+ let id = WebGL.programArray.findIndex((element) => element == null);
+ let program = /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.createProgram();
+
+ if (id == -1) {
+ id = WebGL.programArray.length;
+ WebGL.programArray.push(program);
+ }
+ else {
+ WebGL.programArray[id] = program;
+ }
+ return id;
+ }
+
+ // Creates a render buffer object that can be used as a source or target for rendering
+ importObject.WebGL.createRenderbuffer = (ctx) => {
+ try {
+ let id = WebGL.renderBufferArray.findIndex((element) => element == null);
+ let renderbuffer = /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.createRenderbuffer();
+
+ if (id == -1) {
+ id = WebGL.renderBufferArray.length;
+ WebGL.renderBufferArray.push(renderbuffer);
+ }
+ else {
+ WebGL.renderBufferArray[id] = renderbuffer;
+ }
+ return id;
+ } catch (err) {
+ console.log("renderBufferArray error");
+ console.error(err);
+ } // end catch
+ }
+
+ // Creates a vertex or fragment shader object to be used when compiling a WebGL program
+ importObject.WebGL.createShader = (id, type) => {
+ let id = WebGL.shaderArray.findIndex((element) => element == null);
+ let shader = /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.createShader(type);
+
+ if (id == -1) {
+ id = WebGL.shaderArray.length;
+ WebGL.shaderArray.push(shader);
+ }
+ else {
+ WebGL.shaderArray[id] = shader;
+ }
+ return id;
+ }
+
+ // Creates a texture object
+ importObject.WebGL.createTexture = (ctx) => {
+ let id = WebGL.textureArray.findIndex((element) => element == null);
+ let texture = /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.createTexture();
+
+ if (id == -1) {
+ id = WebGL.textureArray.length;
+ WebGL.textureArray.push(texture);
+ }
+ else {
+ WebGL.textureArray[id] = texture;
+ }
+ return id;
+ }
+
+ // Sets the culling mode
+ importObject.WebGL.cullFace = (id, mode) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.cullFace(target, mode);
+ } catch (err) {
+ console.log("cullFace error");
+ console.error(err);
+ } // end catch
+ }
+
+ // delete the buffer object
+ importObject.WebGL.deleteBuffer = (id, buffer) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.deleteBuffer(this.bufferArray[buffer]);
+ this.bufferArray[buffer] = null;
+ } catch (err) {
+ console.log("deleteBuffer error");
+ console.error(err);
+ } // end catch
+ }
+
+ // delete the frame buffer object
+ importObject.WebGL.deleteFramebuffer = (id, frame_buffer) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.deleteFramebuffer(this.framebufferArray[frame_buffer]);
+ this.framebufferArray[frame_buffer] = null;
+ } catch (err) {
+ console.log("deleteFramebuffer error");
+ console.error(err);
+ } // end catch
+ }
+
+ // delete the render buffer object
+ importObject.WebGL.deleteRenderbuffer = (id, render_buffer) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.deleteRenderbuffer(this.renderBufferArray[render_buffer]);
+ this.renderBufferArray[render_buffer] = null;
+ } catch (err) {
+ console.log("deleteRenderbuffer error");
+ console.error(err);
+ } // end catch
+ }
+
+ // delete the program object
+ importObject.WebGL.deleteProgram = (id, program) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.deleteProgram(this.programArray[program]);
+ this.program[program] = null;
+ } catch (err) {
+ console.log("deleteProgram error");
+ console.error(err);
+ } // end catch
+ }
+
+ // delete the shader object
+ importObject.WebGL.deleteShader = (id, shader) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.deleteShader(this.shaderArray[shader]);
+ this.shaderArray[shader] = null;
+ } catch (err) {
+ console.log("deleteShader error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.deleteTexture = (id, texture) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.deleteShader(this.textureArray[texture]);
+ this.textureArray[texture] = null;
+ } catch (err) {
+ console.log("deleteTexture error");
+ console.error(err);
+ } // end catch
+ }
+
+ // Before calling depthFunc, you must enable DEPTH_TEST
+ // This sets the function that tests the incoming pixel depth against a pixel already in the buffer.
+ // The default value is LESS, meaning that if an incoming pixel depth is less than existing pixel depth
+ // (the new pixel is closer) then the new pixel is drawn.
+ importObject.WebGL.depthFunc = (id, func) => { // func is a depth function enumeration
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.depthFunc(func);
+ } catch (err) {
+ console.log("depthFunc error");
+ console.error(err);
+ } // end catch
+ }
+
+ // enable or disable writing to the depth buffer
+ importObject.WebGL.depthMask = (id, flag) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.depthMask(flag);
+ } catch (err) {
+ console.log("depthMask error");
+ console.error(err);
+ } // end catch
+ }
+
+ // defines the near and far clipping plane in the depth buffer
+ importObject.WebGL.depthRange = (id, zNear, zFar) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.depthRange(zNear, zFar);
+ } catch (err) {
+ console.log("depthRange error");
+ console.error(err);
+ } // end catch
+ }
+
+ // detach the shader currently attached to the program
+ importObject.WebGL.detachShader = (id, program, shader) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.detachShader(program, shader);
+ } catch (err) {
+ console.log("detachShader error");
+ console.error(err);
+ } // end catch
+ }
+
+ // disable a specific WebGL capability
+ importObject.WebGL.disable = (id, cap) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.disable(cap);
+ } catch (err) {
+ console.log("disable error");
+ console.error(err);
+ } // end catch
+ }
+
+ // disables a vertex attribute array at the index loction passed in.
+ importObject.WebGL.disableVertexAttribArray = (id, index) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.disableVertexAttribArray(index);
+ } catch (err) {
+ console.log("disableVertexAttribArray error");
+ console.error(err);
+ } // end catch
+ }
+
+ // render primitive data from array
+ importObject.WebGL.drawArrays = (id, mode, first, count) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.drawArrays(mode, first, count);
+ } catch (err) {
+ console.log("drawArrays error");
+ console.error(err);
+ } // end catch
+ }
+
+ // uses index data to render elements from array data
+ importObject.WebGL.drawElements = (id, mode, count, typ, offset) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.drawElements(mode, count, typ, offset);
+ } catch (err) {
+ console.log("drawElements error");
+ console.error(err);
+ } // end catch
+ }
+
+ // enable a specific WebGL capability
+ importObject.WebGL.enable = (id, cap) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.enable(cap);
+ } catch (err) {
+ console.log("enable error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.enableVertexAttribArray = (id, index) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.enableVertexAttribArray(index);
+ }
+
+ // waits for all previously executed WebGL api calls to finish
+ importObject.WebGL.finish = (ctx) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.finish();
+ } catch (err) {
+ console.log("finish error");
+ console.error(err);
+ } // end catch
+ }
+
+ // ???
+ importObject.WebGL.flush = (ctx) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.flush();
+ } catch (err) {
+ console.log("flush error");
+ console.error(err);
+ } // end catch
+ }
+
+ // attach a render buffer to a frame buffer
+ importObject.WebGL.framebufferRenderbuffer = (id, target, attachment, renderbuffertarget, renderbuffer) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+ } catch (err) {
+ console.log("framebufferRenderbuffer error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.framebufferTexture2D = (id, target, attachment, textarget, texture, level) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.framebufferTexture2D(target, attachment, textarget, texture, level);
+ } catch (err) {
+ console.log("framebufferTexture2D error");
+ console.error(err);
+ } // end catch
+ }
+
+ // set the winding direction of the verticies, which defines the front face
+ importObject.WebGL.frontFace = (id, mode) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.frontFace(mode);
+ } catch (err) {
+ console.log("frontFace error");
+ console.error(err);
+ } // end catch
+ }
+
+ // generates reduced resolution mipmap textures for rendering objects at a distance
+ importObject.WebGL.generateMipmap = (id, target) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.generateMipmap(target);
+ } catch (err) {
+ console.log("generateMipmap error");
+ console.error(err);
+ } // end catch
+ }
+
+ // query information about an attribute of a given program
+ importObject.WebGL.getActiveAttrib = (id, program, index) => {
+ // will this return an externref? How do I move in the data
+ alert("getActiveAttrib is not implemented");
+ return 0;
+ }
+
+ // query information about a uniform in a given program
+ importObject.WebGL.getActiveUniform = (id, program, index) => {
+ // will this return an externref? How do I move in the data
+ alert("getActiveUniform is not implemented");
+ return 0;
+ }
+
+ // needs to return an array of WebGL shaders to the AS
+ importObject.WebGL.getAttachedShaders = (id, program) => {
+ // this will need to return an array of shader indicies.
+ alert("getAttachedShaders is not implemented");
+ return 0;
+ }
+
+ // get an attribute location inside a program given a name
+ importObject.WebGL.getAttribLocation = (id, program, name) => {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getAttribLocation(WebGL.programArray[program], WebGL.getString(name));
+ }
+
+ // returns an int given a buffer parameter name
+ importObject.WebGL.getBufferParameter = (id, target, pname) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getBufferParameter(target, pname);
+ } catch (err) {
+ console.log("getBufferParameter error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.getParameter = (id, pname) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getParameter(pname);
+ } catch (err) {
+ console.log("getParameter error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.getError = (ctx) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getError();
+ } catch (err) {
+ console.log("getError error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.getFramebufferAttachmentParameter = (id, target, attachment, pname) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getParameter(target, attachment, pname);
+ } catch (err) {
+ console.log("getFramebufferAttachmentParameter error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.getProgramInfoLog = (id, program) => {
+ // this needs to return a string to the AS
+ alert("getProgramInfoLog not implemented");
+ return 0;
+ }
+
+ // get information about the renderbuffer
+ importObject.WebGL.getRenderbufferParameter = (id, target, pname) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getRenderbufferParameter(target, pname);
+ } catch (err) {
+ console.log("getRenderbufferParameter error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.getShaderParameter = (id, shader, pname) => {
+ alert("getShaderParameter not implemented");
+ return 0;
+ }
+
+ importObject.WebGL.getShaderPrecisionFormat = (id, shadertype, precisiontype) => {
+ alert("getShaderPrecisionFormat not implemented");
+ return 0;
+ }
+
+ importObject.WebGL.getShaderInfoLog = (id, shader) => {
+ alert("getShaderInfoLog not implemented");
+ return 0;
+ }
+
+ importObject.WebGL.getShaderSource = (id, shader) => {
+ // this needs to return a string to AS
+ alert("getShaderInfoLog not implemented");
+ return 0;
+ }
+
+ importObject.WebGL.getTexParameter = (id, target, pname) => {
+ alert("getTexParameter not implemented");
+ return 0;
+ }
+
+ importObject.WebGL.getUniform = (id, program, location) => {
+ // this can return multiple types
+ alert("getUniform not implemented");
+ return 0;
+ }
+
+ importObject.WebGL.getUniformLocation = (id, program, name) => {
+ let id = WebGL.uniformLocationArray.findIndex((element) => element == null);
+ let uniformLocation = /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getUniformLocation(WebGL.programArray[program], WebGL.getString(name));
+
+ if (id == -1) {
+ id = WebGL.uniformLocationArray.length;
+ WebGL.uniformLocationArray.push(uniformLocation);
+ }
+ else {
+ WebGL.uniformLocationArray[id] = uniformLocation;
+ }
+
+ return id;
+ }
+
+ importObject.WebGL.getVertexAttrib = (id, index, pname) => {
+ // this can return multiple types
+ alert("getVertexAttrib not implemented");
+ return 0;
+ }
+
+ // given a vertex attribute index, return the offset value
+ importObject.WebGL.getVertexAttribOffset = (id, index, pname) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getVertexAttribOffset(index, pname);
+ } catch (err) {
+ console.log("getVertexAttribOffset error");
+ console.error(err);
+ } // end catch
+ }
+
+ // sets shader behaviorial hints, which could potentially improve performance on some implementations
+ importObject.WebGL.hint = (id, target, mode) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.hint(target, mode);
+ } catch (err) {
+ console.log("hint error");
+ console.error(err);
+ } // end catch
+ }
+
+ // THIS MAY JUST NEED TO CHECK TO SEE IF THE NUMBER IS IN THE RENDERBUFFER ARRAY
+ // THERE ARE SEVERAL OF THESE isX FUNCTIONS. I'M NOT SURE IF ANY OF THEM ARE USEFUL
+ // IN THE AS CODE
+ importObject.WebGL.isBuffer = (id, buffer) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.isBuffer(WebGL.bufferArray[buffer]);
+ } catch (err) {
+ console.log("isBuffer error");
+ console.error(err);
+ } // end catch
+ }
+
+ // tests a WebGL capability to see if it is enabled
+ importObject.WebGL.isEnabled = (id, cap) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.isEnabled(cap);
+ } catch (err) {
+ console.log("isEnabled error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.isFramebuffer = (id, framebuffer) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.isFramebuffer(WebGL.frameBufferArray[framebuffer]);
+ } catch (err) {
+ console.log("isFramebuffer error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.isProgram = (id, program) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.isProgram(WebGL.programArray[program]);
+ } catch (err) {
+ console.log("isProgram error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.isRenderbuffer = (id, renderbuffer) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.isRenderbuffer(WebGL.renderBufferArray[renderbuffer]);
+ } catch (err) {
+ console.log("isRenderbuffer error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.isShader = (id, shader) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.isShader(WebGL.shaderArray[shader]);
+ } catch (err) {
+ console.log("isShader error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.isTexture = (id, texture) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.isTexture(WebGL.textureArray[texture]);
+ } catch (err) {
+ console.log("isTexture error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.lineWidth = (id, width) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.lineWidth(width);
+ } catch (err) {
+ console.log("lineWidth error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.linkProgram = (id, program) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.linkProgram(WebGL.programArray[program]);
+
+ if (! /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getProgramParameter(WebGL.programArray[program],
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.LINK_STATUS)) {
+ console.log( /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.getProgramInfoLog(WebGL.programArray[program]));
+ }
+ }
+
+ // set pixel storage mode
+ importObject.WebGL.pixelStorei = (id, pname, param) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.pixelStorei(pname, param);
+ }
+
+ // ???
+ importObject.WebGL.polygonOffset = (id, factor, units) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.polygonOffset(factor, units);
+ } catch (err) {
+ console.log("polygonOffset error");
+ console.error(err);
+ } // end catch
+ }
+
+ // read a block of pixels into an array buffer view
+ importObject.WebGL.readPixels = (id, x, y, width, height, format, typ, pixels) => {
+ alert("readPixels not implemented");
+ }
+
+ // create and initialize a renderbuffer object's data store
+ importObject.WebGL.renderbufferStorage = (id, target, internalformat, width, height) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.renderbufferStorage(target, internalformat, width, height);
+ } catch (err) {
+ console.log("renderbufferStorage error");
+ console.error(err);
+ } // end catch
+ }
+
+ // sampling for anti-aliasing. SAMPLE_COVERAGE must be enabled.
+ importObject.WebGL.sampleCoverage = (id, value, invert) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.sampleCoverage(value, invert);
+ } catch (err) {
+ console.log("sampleCoverage error");
+ console.error(err);
+ } // end catch
+ }
+
+ // create a scissor box to draw inside. SCISSOR_TEST must be enabled.
+ importObject.WebGL.scissor = (id, x, y, width, height) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.scissor(x, y, width, height);
+ } catch (err) {
+ console.log("scissor error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.shaderSource = (id, shader, source) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.shaderSource(WebGL.shaderArray[shader], WebGL.getString(source));
+ }
+
+ // sets a function for allowing pixels to pass through a stencil. STENCIL_TEST must be set.
+ importObject.WebGL.stencilFunc = (id, func, ref, mask) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.stencilFunc(func, ref, mask);
+ } catch (err) {
+ console.log("stencilFunc error");
+ console.error(err);
+ } // end catch
+ }
+
+ // allows you to set different stencils for front and back faces.
+ importObject.WebGL.stencilFuncSeparate = (id, face, func, ref, mask) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.stencilFuncSeparate(face, func, ref, mask);
+ } catch (err) {
+ console.log("stencilFuncSeparate error");
+ console.error(err);
+ } // end catch
+ }
+
+ // defines stencil masking bits
+ importObject.WebGL.stencilMask = (id, mask) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.stencilMask(mask);
+ } catch (err) {
+ console.log("stencilMask error");
+ console.error(err);
+ } // end catch
+ }
+
+ // use different stencil mask for front and back faces
+ importObject.WebGL.stencilMaskSeparate = (id, face, mask) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.stencilMaskSeparate(face, mask);
+ } catch (err) {
+ console.log("stencilMaskSeparate error");
+ console.error(err);
+ } // end catch
+ }
+
+ // PROBLEM: zfail is a function
+ importObject.WebGL.stencilOp = (id, fail, zfail, zpass) => {
+ alert("stencilOp is not implemented");
+ }
+
+ // PROBLEM: zfail is a function
+ importObject.WebGL.stencilOpSeparate = (id, face, fail, zfail, zpass) => {
+ alert("stencilOpSeparate is not implemented");
+ }
+
+ // specify a two-dimensional texture image
+ importObject.WebGL.texImage2D = (id, target, level, internalformat, format, typ, image_id) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.texImage2D(target, level, internalformat,
+ format, typ, WebGL.imageArray[image_id]);//WebGL.getArrayView(pixels));
+ }
+
+ importObject.WebGL.texParameterf = (id, target, pname, param) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.texParameterf(target, pname, param);
+ } catch (err) {
+ console.log("texParameterf error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.texParameteri = (id, target, pname, param) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.texParameteri(target, pname, param);
+ }
+
+ importObject.WebGL.texSubImage2D = (id, target, level, xoffset, yoffset,
+ width, height,
+ format, typ, pixels) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.texSubImage2D(target, level, xoffset, yoffset,
+ width, height, format, typ, WebGL.getArrayView(pixels));
+ } catch (err) {
+ console.log("texSubImage2D error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform1f = (id, location, x) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform1f(WebGL.uniformLocationArray[location], x);
+ } catch (err) {
+ console.log("uniform1f error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform1fv = (id, location, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform1fv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("uniform1fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform1i = (id, location, x) => {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform1i(WebGL.uniformLocationArray[location], x);
+ }
+
+ importObject.WebGL.uniform1iv = (id, location, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform1iv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("uniform1iv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform2f = (id, location, x, y) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform2f(WebGL.uniformLocationArray[location], x, y);
+ } catch (err) {
+ console.log("uniform2f error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform2fv = (id, location, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform2fv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("uniform2fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform2i = (id, location, x, y) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform2i(WebGL.uniformLocationArray[location], x, y);
+ } catch (err) {
+ console.log("uniform2i error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform2iv = (id, location, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform2iv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("uniform2iv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform3f = (id, location, x, y, z) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform3f(WebGL.uniformLocationArray[location], x, y, z);
+ } catch (err) {
+ console.log("uniform3f error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform3fv = (id, location, v) => {
+ try {
+ //Float32Array
+ //return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform3fv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v));
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform3fv(WebGL.uniformLocationArray[location], new Float32Array(v));
+ } catch (err) {
+ console.log("uniform3fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform3i = (id, location, x, y, z) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform3i(WebGL.uniformLocationArray[location], x, y, z);
+ } catch (err) {
+ console.log("uniform3i error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform3iv = (id, location, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform3iv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("uniform3iv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform4f = (id, location, x, y, z, w) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform4f(WebGL.uniformLocationArray[location], x, y, z, w);
+ } catch (err) {
+ console.log("uniform4f error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform4fv = (id, location, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform4fv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("uniform4fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform4i = (id, location, x, y, z, w) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform4i(WebGL.uniformLocationArray[location], x, y, z, w);
+ } catch (err) {
+ console.log("uniform4i error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.uniform4iv = (id, location, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniform4iv(WebGL.uniformLocationArray[location], WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("uniform4iv error");
+ console.error(err);
+ } // end catch
+ }
+
+ // Assumes an f32 as GLfloat
+ importObject.WebGL.uniformMatrix2fv = (id, location, transpose, value_arr) => {
+ try {
+ const buffer = WebGL.memory.buffer;
+ let start_pos = value_arr >> 2;
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniformMatrix3fv(WebGL.uniformLocationArray[location], transpose,
+ new Float32Array(buffer).subarray(start_pos, start_pos + 4));
+
+ } catch (err) {
+ console.log("uniformMatrix2fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ // this assumes f32 as GLfloat
+ importObject.WebGL.uniformMatrix3fv = (id, location, transpose, value_arr) => {
+ try {
+ const buffer = WebGL.memory.buffer;
+ let start_pos = value_arr >> 2;
+ //console.log(new Float32Array(buffer).subarray(start_pos, start_pos + 9));
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniformMatrix3fv(WebGL.uniformLocationArray[location], transpose,
+ new Float32Array(buffer).subarray(start_pos, start_pos + 9));
+
+ } catch (err) {
+ console.log("uniformMatrix3fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ // this assumes f32 as GLfloat
+ // I might do this for more functions
+ importObject.WebGL.uniformMatrix4fv = (id, location, transpose, value_arr) => {
+ try {
+ const buffer = WebGL.memory.buffer;
+ let start_pos = value_arr >> 2;
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.uniformMatrix3fv(WebGL.uniformLocationArray[location], transpose,
+ new Float32Array(buffer).subarray(start_pos, start_pos + 16));
+
+ } catch (err) {
+ console.log("uniformMatrix4fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.useProgram = (id, program) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.useProgram(WebGL.programArray[program]);
+ }
+
+ importObject.WebGL.validateProgram = (id, program) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.validateProgram(WebGL.programArray[program]);
+ } catch (err) {
+ console.log("validateProgram error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttrib1f = (id, indx, x) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttrib1f(indx, x);
+ } catch (err) {
+ console.log("vertexAttrib1f error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttrib1fv = (id, indx, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttrib1fv(indx, WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("vertexAttrib1fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttrib2f = (id, indx, x, y) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttrib2f(indx, x, y);
+ } catch (err) {
+ console.log("vertexAttrib2f error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttrib2fv = (id, indx, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttrib2fv(indx, WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("vertexAttrib2fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttrib3f = (id, indx, x, y, z) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttrib3f(indx, x, y, z);
+ } catch (err) {
+ console.log("vertexAttrib3f error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttrib3fv = (id, indx, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttrib3fv(indx, WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("vertexAttrib3fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttrib4f = (id, indx, x, y, z, w) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttrib4f(indx, x, y, z, w);
+ } catch (err) {
+ console.log("vertexAttrib4f error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttrib4fv = (id, indx, v) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttrib4fv(indx, WebGL.getArrayView(v));
+ } catch (err) {
+ console.log("vertexAttrib4fv error");
+ console.error(err);
+ } // end catch
+ }
+
+ importObject.WebGL.vertexAttribPointer = (id, indx, size, typ, normalized, stride, offset) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttribPointer(indx, size, typ, normalized, stride, offset);
+ }
+
+ importObject.WebGL.viewport = (id, indx, x, y, width, height) => {
+ try {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.viewport(indx, x, y, width, height);
+ } catch (err) {
+ console.log("viewport error");
+ console.error(err);
+ } // end catch
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.copyBufferSubData = (id, readTarget, writeTarget, readOffset, writeOffset, size) => {
+ alert("copyBufferSubData not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getBufferSubData = (id, target, srcByteOffset, dstBuffer, dstOffset, length) => {
+ alert("getBufferSubData not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.blitFramebuffer = (id, srcX0, srcY0, srcX1, srcY1,
+ dstX0, dstY0, dstX1, dstY1,
+ mask, filter) => {
+ alert("blitFramebuffer not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.framebufferTextureLayer = (id, target, attachment, texture, level, layer) => {
+ alert("framebufferTextureLayer not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.invalidateFramebuffer = (id, target, attachments) => {
+ alert("invalidateFramebuffer not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.invalidateSubFramebuffer = (id, target, attachments, x, y, width, height) => {
+ alert("invalidateSubFramebuffer not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.readBuffer = (id, src) => {
+ alert("readBuffer not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getInternalformatParameter = (id, target, internalformat, pname) => {
+ alert("getInternalformatParameter not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.renderbufferStorageMultisample = (id, target, samples, internalformat, width, height) => {
+ alert("renderbufferStorageMultisample not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.texStorage2D = (id, target, levels, internalformat, width, height) => {
+ alert("texStorage2D not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.texStorage3D = (id, target, levels, internalformat, width, height, depth) => {
+ alert("texStorage3D not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.texSubImage3D = (id, target, level, xoffset, yoffset, zoffset,
+ width, height, depth, format, typ, pboOffset) => {
+ alert("texSubImage3D not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.copyTexSubImage3D = (id, target, level, xoffset, yoffset, zoffset, x, y, width, height) => {
+ alert("copyTexSubImage3D not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.compressedTexImage3D = (id, target, level, internalformat, width,
+ height, depth, border, imageSize, offset) => {
+ alert("compressedTexImage3D not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.compressedTexSubImage3D = (id, target, level, xoffset, yoffset, zoffset,
+ width, height, depth, format, imageSize, offset) => {
+ alert("compressedTexSubImage3D not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getFragDataLocation = (id, program, name) => {
+ alert("getFragDataLocation not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform1ui = (id, location, v0) => {
+ alert("uniform1ui not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform2ui = (id, location, v0, v1) => {
+ alert("uniform2ui not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform3ui = (id, location, v0, v1, v3) => {
+ alert("uniform3ui not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform4ui = (id, location, v0, v1, v3, v4) => {
+ alert("uniform4ui not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform1uiv = (id, location, data, srcOffset, srcLength) => {
+ alert("uniform1uiv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform2uiv = (id, location, data, srcOffset, srcLength) => {
+ alert("uniform2uiv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform3uiv = (id, location, data, srcOffset, srcLength) => {
+ alert("uniform3uiv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniform4uiv = (id, location, data, srcOffset, srcLength) => {
+ alert("uniform4uiv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix3x2fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ alert("uniformMatrix3x2fv not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix4x2fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ alert("uniformMatrix4x2fv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix2x3fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ alert("uniformMatrix2x3fv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix4x3fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ alert("uniformMatrix4x3fv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix2x4fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ console.trace("uniformMatrix2x4fv");
+ alert("uniformMatrix2x4fv not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformMatrix3x4fv = (id, location, transpose, data, srcOffset, srcLength) => {
+ console.trace("uniformMatrix3x4fv");
+ alert("uniformMatrix3x4fv not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribI4i = (id, index, x, y, z, w) => {
+ console.trace("vertexAttribI4i");
+ alert("vertexAttribI4i not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribI4iv = (id, index, value_arr) => {
+ console.trace("vertexAttribI4iv");
+ alert("vertexAttribI4iv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribI4ui = (id, index, x, y, z, w) => {
+ console.trace("vertexAttribI4ui");
+ alert("vertexAttribI4ui not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribI4uiv = (id, index, value_arr) => {
+ console.trace("vertexAttribI4uiv");
+ alert("vertexAttribI4uiv not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribIPointer = (id, index, size, typ, stride, offset) => {
+ console.trace("vertexAttribIPointer");
+ alert("vertexAttribIPointer not implemented (expiramental)");
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.vertexAttribDivisor = (id, index, divisor) => {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.vertexAttribDivisor(index, divisor);
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.drawArraysInstanced = (id, mode, first, count, instanceCount) => {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.drawArraysInstanced(mode, first, count, instanceCount);
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.drawElementsInstanced = (id, mode, count, typ, offset, instanceCount) => {
+ try {
+ return /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.drawArraysInstanced(mode, count, typ, offset, instanceCount);
+ } catch (err) {
+ console.log("drawElementsInstanced error");
+ console.error(err);
+ } // end catch
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.drawRangeElements = (id, mode, start, end, count, typ, offset) => {
+ alert("drawRangeElements not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.drawBuffers = (id, buffers) => {
+ alert("drawBuffers not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clearBufferfv = (id, buffer, drawbuffer, values, srcOffset) => {
+ alert("clearBufferfv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clearBufferiv = (id, buffer, drawbuffer, values, srcOffset) => {
+ alert("clearBufferiv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clearBufferuiv = (id, buffer, drawbuffer, values, srcOffset) => {
+ alert("clearBufferuiv not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clearBufferfi = (id, buffer, drawbuffer, depth, stencil) => {
+ alert("clearBufferfi not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.createQuery = (ctx) => {
+ alert("createQuery not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteQuery = (id, query) => {
+ alert("deleteQuery not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isQuery = (id, query) => {
+ alert("isQuery not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.beginQuery = (id, target, query) => {
+ alert("beginQuery not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.endQuery = (id, query) => {
+ alert("endQuery not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getQuery = (id, query, pname) => {
+ alert("getQuery not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getQueryParameter = (id, query, pname) => {
+ alert("getQueryParameter not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.createSampler = (ctx) => {
+ alert("createSampler not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteSampler = (id, sampler) => {
+ alert("deleteSampler not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isSampler = (id, sampler) => {
+ alert("isSampler not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindSampler = (id, uint, sampler) => {
+ alert("bindSampler not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.samplerParameteri = (id, sampler, pname, param) => {
+ alert("samplerParameteri not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.samplerParameterf = (id, sampler, pname, param) => {
+ alert("samplerParameterf not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getSamplerParameter = (id, sampler, pname) => {
+ alert("getSamplerParameter not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.fenceSync = (id, condition, flags) => {
+ alert("fenceSync not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isSync = (id, sync) => {
+ alert("isSync not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteSync = (id, sync) => {
+ alert("deleteSync not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.clientWaitSync = (id, sync, flags, timeout) => {
+ alert("clientWaitSync not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.waitSync = (id, sync, flags, timeout) => {
+ alert("waitSync not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getSyncParameter = (id, sync, pname) => {
+ alert("getSyncParameter not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.createTransformFeedback = (ctx) => {
+ alert("createTransformFeedback not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteTransformFeedback = (id, tf) => {
+ alert("deleteTransformFeedback not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isTransformFeedback = (id, tf) => {
+ alert("isTransformFeedback not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindTransformFeedback = (id, target, tf) => {
+ alert("bindTransformFeedback not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.beginTransformFeedback = (id, primitiveMode) => {
+ alert("beginTransformFeedback not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.endTransformFeedback = (ctx) => {
+ alert("endTransformFeedback not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.transformFeedbackVaryings = (id, program, varyings, bufferMode) => {
+ alert("transformFeedbackVaryings not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getTransformFeedbackVarying = (id, program, index) => {
+ alert("getTransformFeedbackVarying not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.pauseTransformFeedback = (ctx) => {
+ alert("pauseTransformFeedback not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.resumeTransformFeedback = (ctx) => {
+ alert("resumeTransformFeedback not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindBufferBase = (id, target, index, buffer) => {
+ alert("bindBufferBase not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindBufferRange = (id, target, index, buffer, offset, size) => {
+ alert("bindBufferRange not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getIndexedParameter = (id, target, index) => {
+ alert("getIndexedParameter not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getUniformIndices = (id, program, uniformNames) => {
+ alert("getUniformIndices not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getActiveUniforms = (id, program, uniformIndices, pname) => {
+ alert("getActiveUniforms not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getUniformBlockIndex = (id, program, uniformBlockName) => {
+ alert("getUniformBlockIndex not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getActiveUniformBlockParameter = (id, program, uniformBlockIndex, pname) => {
+ alert("getActiveUniformBlockParameter not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.getActiveUniformBlockName = (id, program, uniformBlockIndex) => {
+ alert("getActiveUniformBlockName not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.uniformBlockBinding = (id, program, uniformBlockIndex, uniformBlockBinding) => {
+ alert("uniformBlockBinding not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.createVertexArray = (ctx) => {
+ let id = WebGL.vaoArray.findIndex((element) => element == null);
+ let vao = /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.createVertexArray();
+
+ if (id == -1) {
+ id = WebGL.vaoArray.length;
+ WebGL.vaoArray.push(vao);
+ }
+ else {
+ WebGL.vaoArray[id] = vao;
+ }
+ return id;
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.deleteVertexArray = (id, vertexArray) => {
+ alert("deleteVertexArray not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.isVertexArray = (id, vertexArray) => {
+ alert("isVertexArray not implemented (expiramental)");
+
+ }
+
+ // expiramental WebGL2
+ importObject.WebGL.bindVertexArray = (id, vaoId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self
+.bindVertexArray(WebGL.vaoArray[vaoId]);
+ }
+
+}
diff --git a/aswebglue/examples/AnimationTexture/README.md b/aswebglue/examples/AnimationTexture/README.md
new file mode 100644
index 0000000..56ce31a
--- /dev/null
+++ b/aswebglue/examples/AnimationTexture/README.md
@@ -0,0 +1,3 @@
+# Animation Texture
+
+This example is an animated sprite.
diff --git a/aswebglue/examples/AnimationTexture/index.html b/aswebglue/examples/AnimationTexture/index.html
new file mode 100644
index 0000000..bfc42dc
--- /dev/null
+++ b/aswebglue/examples/AnimationTexture/index.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ Animation Texture Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/AnimationTexture/kaijunicorn.json b/aswebglue/examples/AnimationTexture/kaijunicorn.json
new file mode 100644
index 0000000..7eb4526
--- /dev/null
+++ b/aswebglue/examples/AnimationTexture/kaijunicorn.json
@@ -0,0 +1,36 @@
+{"frames": {
+
+"kaijunicorn1.png":
+{
+ "frame": {"x":1,"y":1,"w":42,"h":64},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":3,"y":0,"w":42,"h":64},
+ "sourceSize": {"w":48,"h":64}
+},
+"kaijunicorn2.png":
+{
+ "frame": {"x":1,"y":133,"w":40,"h":64},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":5,"y":0,"w":40,"h":64},
+ "sourceSize": {"w":48,"h":64}
+},
+"kaijunicorn3.png":
+{
+ "frame": {"x":1,"y":67,"w":41,"h":64},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":5,"y":0,"w":41,"h":64},
+ "sourceSize": {"w":48,"h":64}
+}},
+"meta": {
+ "app": "https://www.codeandweb.com/texturepacker",
+ "version": "1.0",
+ "image": "kaijunicorn.png",
+ "format": "RGBA8888",
+ "size": {"w":44,"h":198},
+ "scale": "1",
+ "smartupdate": "$TexturePacker:SmartUpdate:6e386e05493c1963607c61a7919b90cd:a86b0a5e232f296e9763f0871df228fb:0ddf5b54490cc1c036def6a03cfb8e4e$"
+}
+}
diff --git a/aswebglue/examples/AnimationTexture/kaijunicorn.png b/aswebglue/examples/AnimationTexture/kaijunicorn.png
new file mode 100644
index 0000000..e1bf264
Binary files /dev/null and b/aswebglue/examples/AnimationTexture/kaijunicorn.png differ
diff --git a/aswebglue/examples/AnimationTexture/kaijunicorn.tps b/aswebglue/examples/AnimationTexture/kaijunicorn.tps
new file mode 100644
index 0000000..2c016fb
--- /dev/null
+++ b/aswebglue/examples/AnimationTexture/kaijunicorn.tps
@@ -0,0 +1,231 @@
+
+
+
+ fileFormatVersion
+ 4
+ texturePackerVersion
+ 5.4.0
+ autoSDSettings
+
+
+ scale
+ 1
+ extension
+
+ spriteFilter
+
+ acceptFractionalValues
+
+ maxTextureSize
+
+ width
+ -1
+ height
+ -1
+
+
+
+ allowRotation
+
+ shapeDebug
+
+ dpi
+ 72
+ dataFormat
+ json
+ textureFileName
+ kaijunicorn.png
+ flipPVR
+
+ pvrCompressionQuality
+ PVR_QUALITY_NORMAL
+ atfCompressData
+
+ mipMapMinSize
+ 32768
+ etc1CompressionQuality
+ ETC1_QUALITY_LOW_PERCEPTUAL
+ etc2CompressionQuality
+ ETC2_QUALITY_LOW_PERCEPTUAL
+ dxtCompressionMode
+ DXT_PERCEPTUAL
+ jxrColorFormat
+ JXR_YUV444
+ jxrTrimFlexBits
+ 0
+ jxrCompressionLevel
+ 0
+ ditherType
+ PngQuantLow
+ backgroundColor
+ 0
+ libGdx
+
+ filtering
+
+ x
+ Linear
+ y
+ Linear
+
+
+ shapePadding
+ 0
+ jpgQuality
+ 80
+ pngOptimizationLevel
+ 1
+ webpQualityLevel
+ 101
+ textureSubPath
+
+ atfFormats
+
+ textureFormat
+ png8
+ borderPadding
+ 0
+ maxTextureSize
+
+ width
+ 2048
+ height
+ 2048
+
+ fixedTextureSize
+
+ width
+ -1
+ height
+ -1
+
+ algorithmSettings
+
+ algorithm
+ MaxRects
+ freeSizeMode
+ Best
+ sizeConstraints
+ AnySize
+ forceSquared
+
+ maxRects
+
+ heuristic
+ Best
+
+ basic
+
+ sortBy
+ Best
+ order
+ Ascending
+
+ polygon
+
+ alignToGrid
+ 1
+
+
+ dataFileNames
+
+ data
+
+ name
+ kaijunicorn.json
+
+
+ multiPack
+
+ forceIdenticalLayout
+
+ outputFormat
+ RGBA8888
+ alphaHandling
+ ClearTransparentPixels
+ contentProtection
+
+ key
+
+
+ autoAliasEnabled
+
+ trimSpriteNames
+
+ prependSmartFolderName
+
+ autodetectAnimations
+
+ globalSpriteSettings
+
+ scale
+ 1
+ scaleMode
+ Smooth
+ extrude
+ 1
+ trimThreshold
+ 1
+ trimMargin
+ 1
+ trimMode
+ Trim
+ tracerTolerance
+ 200
+ heuristicMask
+
+ defaultPivotPoint
+ 0.5,0.5
+ writePivotPoints
+
+
+ individualSpriteSettings
+
+ kaijunicorn1.png
+ kaijunicorn2.png
+ kaijunicorn3.png
+
+ pivotPoint
+ 0.5,0.5
+ spriteScale
+ 1
+ scale9Enabled
+
+ scale9Borders
+ 12,16,24,32
+ scale9Paddings
+ 12,16,24,32
+ scale9FromFile
+
+
+
+ fileList
+
+ kaijunicorn1.png
+ kaijunicorn2.png
+ kaijunicorn3.png
+
+ ignoreFileList
+
+ replaceList
+
+ ignoredWarnings
+
+ commonDivisorX
+ 1
+ commonDivisorY
+ 1
+ packNormalMaps
+
+ autodetectNormalMaps
+
+ normalMapFilter
+
+ normalMapSuffix
+
+ normalMapSheetFileName
+
+ exporterProperties
+
+
+
diff --git a/aswebglue/examples/AnimationTexture/kaijunicorn1.png b/aswebglue/examples/AnimationTexture/kaijunicorn1.png
new file mode 100644
index 0000000..f920c54
Binary files /dev/null and b/aswebglue/examples/AnimationTexture/kaijunicorn1.png differ
diff --git a/aswebglue/examples/AnimationTexture/kaijunicorn2.png b/aswebglue/examples/AnimationTexture/kaijunicorn2.png
new file mode 100644
index 0000000..885fd1f
Binary files /dev/null and b/aswebglue/examples/AnimationTexture/kaijunicorn2.png differ
diff --git a/aswebglue/examples/AnimationTexture/kaijunicorn3.png b/aswebglue/examples/AnimationTexture/kaijunicorn3.png
new file mode 100644
index 0000000..5b15bdb
Binary files /dev/null and b/aswebglue/examples/AnimationTexture/kaijunicorn3.png differ
diff --git a/aswebglue/examples/AnimationTexture/texture_animation.ts b/aswebglue/examples/AnimationTexture/texture_animation.ts
new file mode 100644
index 0000000..0a79cad
--- /dev/null
+++ b/aswebglue/examples/AnimationTexture/texture_animation.ts
@@ -0,0 +1,149 @@
+/**
+ * @author Rick Battagline / https://embed.com/wasm
+ */
+
+import {WebGLRenderingContext} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec2 position;
+ in vec2 tex_coord;
+
+ out vec2 tc;
+
+ void main() {
+ gl_Position = vec4(position, 0.0, 1.0);
+ tc = tex_coord;
+ }
+`;
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec2 tc;
+
+ uniform sampler2D sampler;
+
+ out vec4 color;
+
+ void main() {
+ color = texture( sampler, tc );
+ }
+`;
+
+// initialize webgl
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+// ImageData, createImage, imageReady,
+var image_id = gl.createImage('kaijunicorn.png');
+var image_ready: bool = false;
+
+let vertex_shader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let tex_coord_al = gl.getAttribLocation(program, 'tex_coord');
+gl.enableVertexAttribArray(tex_coord_al);
+
+gl.enable(gl.BLEND);
+gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+
+let frame_num = 0;
+// frame 44 x 198
+// prettier-ignore
+let frame_1: StaticArray = [
+// x y u v
+ -0.15, -0.2, 0.0, 0.01,
+ -0.15, 0.2, 0.0, 0.33,
+ 0.15, -0.2, 0.95, 0.01,
+ 0.15, 0.2, 0.95, 0.33,
+];
+
+// prettier-ignore
+let frame_2: StaticArray = [
+ -0.15, -0.2, 0.0, 0.33,
+ -0.15, 0.2, 0.0, 0.66,
+ 0.15, -0.2, 0.95, 0.33,
+ 0.15, 0.2, 0.95, 0.66,
+];
+
+// prettier-ignore
+let frame_3: StaticArray = [
+ -0.15, -0.2, 0.0, 0.66,
+ -0.15, 0.2, 0.0, 0.999,
+ 0.15, -0.2, 0.95, 0.66,
+ 0.15, 0.2, 0.95, 0.999,
+];
+
+let texture = gl.createTexture();
+let sampler = gl.getUniformLocation(program, 'sampler');
+let time_left: i32 = 100;
+
+export function displayLoop(delta: i32): void {
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ if (image_ready == false) {
+ if (gl.imageReady(image_id) == false) {
+ return;
+ }
+
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +true);
+ gl.activeTexture(gl.TEXTURE0);
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image_id);
+
+ gl.uniform1i(sampler, 0);
+ image_ready = true;
+ }
+
+ if (time_left <= 0) {
+ if (frame_num == 3) {
+ frame_num = 0;
+ } else {
+ frame_num++;
+ }
+ time_left = 100;
+ } else {
+ time_left -= delta;
+ }
+
+ if (frame_num == 0) {
+ gl.bufferData(gl.ARRAY_BUFFER, frame_3, gl.STATIC_DRAW);
+ } else if (frame_num == 1) {
+ gl.bufferData(gl.ARRAY_BUFFER, frame_2, gl.STATIC_DRAW);
+ } else if (frame_num == 2) {
+ gl.bufferData(gl.ARRAY_BUFFER, frame_3, gl.STATIC_DRAW);
+ } else {
+ gl.bufferData(gl.ARRAY_BUFFER, frame_1, gl.STATIC_DRAW);
+ }
+
+ //vertexAttribPointer attribute | dimensions | data type | normalize | stride bytes | offset bytes
+ gl.vertexAttribPointer(position_al, 2, gl.FLOAT, +false, 16, 0);
+ gl.vertexAttribPointer(tex_coord_al, 2, gl.FLOAT, +false, 16, 8);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, frame_1.length / 4);
+}
diff --git a/aswebglue/examples/ColorTriangle/README.md b/aswebglue/examples/ColorTriangle/README.md
new file mode 100644
index 0000000..d096623
--- /dev/null
+++ b/aswebglue/examples/ColorTriangle/README.md
@@ -0,0 +1,3 @@
+# Color Triangle
+
+This example adds a color value to the *Hello World Triangle* example.
\ No newline at end of file
diff --git a/aswebglue/examples/ColorTriangle/color_triangle.ts b/aswebglue/examples/ColorTriangle/color_triangle.ts
new file mode 100644
index 0000000..9bf9065
--- /dev/null
+++ b/aswebglue/examples/ColorTriangle/color_triangle.ts
@@ -0,0 +1,79 @@
+/**
+ * @author Rick Battagline / https://embed.com/wasm
+ */
+
+import {WebGLRenderingContext} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ layout(location = 0) in vec2 position;
+ layout(location = 1) in vec3 color;
+ out vec4 c;
+
+ void main() {
+ gl_Position = vec4( position, 0.0, 1.0 );
+ c = vec4(color, 1.0);
+ }
+`;
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+// initialize webgl
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al = gl.getAttribLocation(program, 'position');
+
+let color_al = gl.getAttribLocation(program, 'color');
+
+// prettier-ignore
+let line_data: StaticArray = [
+// X Y R G B
+ 0.0, 0.5, 1.0, 0.0, 0.0,
+ -0.5, -0.5, 0.0, 1.0, 0.0,
+ 0.5, -0.5, 0.0, 0.0, 1.0,
+];
+
+gl.enableVertexAttribArray(position_al);
+gl.enableVertexAttribArray(color_al);
+
+export function displayLoop(delta: i32): void {
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gl.bufferData(gl.ARRAY_BUFFER, line_data, gl.STATIC_DRAW);
+
+ //vertexAttribPointer attribute | dimensions | data type | normalize | stride bytes | offset bytes
+ gl.vertexAttribPointer(position_al, 2, gl.FLOAT, +false, 20, 0);
+ gl.vertexAttribPointer(color_al, 3, gl.FLOAT, +false, 20, 8);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, line_data.length / 5);
+}
diff --git a/aswebglue/examples/ColorTriangle/index.html b/aswebglue/examples/ColorTriangle/index.html
new file mode 100644
index 0000000..56fce24
--- /dev/null
+++ b/aswebglue/examples/ColorTriangle/index.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ Color Triangle Demo
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/ColorTriangleRotate/README.md b/aswebglue/examples/ColorTriangleRotate/README.md
new file mode 100644
index 0000000..154e4cb
--- /dev/null
+++ b/aswebglue/examples/ColorTriangleRotate/README.md
@@ -0,0 +1,21 @@
+# Rotating color triangle
+
+This takes the color triangle example and rotates it around the z-axis with a new rotate function:
+
+```
+function rotate(theta: f32): void { //u32 {
+
+ for (var coord_i: i32 = 0; coord_i < line_data.length; coord_i += 5) {
+ let x: f32 = line_data[coord_i];
+ let y: f32 = line_data[coord_i + 1];
+
+ let x1: f32 = x * Mathf.cos(theta) - y * Mathf.sin(theta);
+
+ let y1: f32 = y * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ line_data[coord_i] = x1;
+ line_data[coord_i + 1] = y1;
+ }
+ return;
+}
+```
\ No newline at end of file
diff --git a/aswebglue/examples/ColorTriangleRotate/color_triangle_rotate.ts b/aswebglue/examples/ColorTriangleRotate/color_triangle_rotate.ts
new file mode 100644
index 0000000..1abd383
--- /dev/null
+++ b/aswebglue/examples/ColorTriangleRotate/color_triangle_rotate.ts
@@ -0,0 +1,96 @@
+/**
+ * @author Rick Battagline / https://embed.com/wasm
+ */
+
+import {WebGLRenderingContext} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ layout(location = 0) in vec2 position;
+ layout(location = 1) in vec3 color;
+ out vec4 c;
+
+ void main() {
+ gl_Position = vec4( position, 0.0, 1.0 );
+ c = vec4(color, 1.0);
+ }
+`;
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+// initialize webgl
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al = gl.getAttribLocation(program, 'position');
+
+let color_al = gl.getAttribLocation(program, 'color');
+
+// prettier-ignore
+let line_data: StaticArray = [
+// X Y R G B
+ 0.0, 0.5, 1.0, 0.0, 0.0,
+ -0.55, -0.5, 0.0, 1.0, 0.0,
+ 0.55, -0.5, 0.0, 0.0, 1.0,
+];
+
+gl.enableVertexAttribArray(position_al);
+gl.enableVertexAttribArray(color_al);
+
+function rotate(theta: f32): void {
+ for (var coord_i: i32 = 0; coord_i < line_data.length; coord_i += 5) {
+ let x: f32 = line_data[coord_i];
+ let y: f32 = line_data[coord_i + 1];
+
+ let x1: f32 = x * Mathf.cos(theta) - y * Mathf.sin(theta);
+
+ let y1: f32 = y * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ line_data[coord_i] = x1;
+ line_data[coord_i + 1] = y1;
+ }
+ return;
+}
+export function displayLoop(delta: i32): void {
+ let r: f32 = delta / 10000.0;
+ rotate(r);
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gl.bufferData(gl.ARRAY_BUFFER, line_data, gl.DYNAMIC_DRAW);
+
+ //vertexAttribPointer attribute | dimensions | data type | normalize | stride bytes | offset bytes
+ gl.vertexAttribPointer(position_al, 2, gl.FLOAT, +false, 20, 0);
+ gl.vertexAttribPointer(color_al, 3, gl.FLOAT, +false, 20, 8);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, line_data.length / 5);
+}
diff --git a/aswebglue/examples/ColorTriangleRotate/index.html b/aswebglue/examples/ColorTriangleRotate/index.html
new file mode 100644
index 0000000..6687e0a
--- /dev/null
+++ b/aswebglue/examples/ColorTriangleRotate/index.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ Color Triangle with Rotation
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/Cube/README.md b/aswebglue/examples/Cube/README.md
new file mode 100644
index 0000000..8ede514
--- /dev/null
+++ b/aswebglue/examples/Cube/README.md
@@ -0,0 +1,3 @@
+# Cube
+
+This example renderes a multicolor spinning cube. There is no lighting on this cube, so the faces had to each be a different color to make it obvious that you are looking at a cube.
\ No newline at end of file
diff --git a/aswebglue/examples/Cube/cube.ts b/aswebglue/examples/Cube/cube.ts
new file mode 100644
index 0000000..1916dc8
--- /dev/null
+++ b/aswebglue/examples/Cube/cube.ts
@@ -0,0 +1,147 @@
+/**
+ * @author Rick Battagline / https://embed.com/wasm
+ */
+
+import {WebGLRenderingContext, WebGLShader, WebGLProgram} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec3 position;
+ in vec3 color;
+ out vec4 c;
+
+ void main() {
+ mat4 mRotateTranslate = mat4(
+ 1.0, 0.0, 0.0, 0.0, // column 1
+ 0.0, cos(-0.2),-sin(-0.2), -0.2, // column 2
+ 0.0, sin(-0.0), cos(-0.2), 0.0, // column 3
+ 0.0, 0.0, 0.0, 1.0 // column 4
+ );
+
+ gl_Position = vec4( position, 1.0 ) * mRotateTranslate;
+ c = vec4(color, 1.0);
+ }
+`;
+
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+// initialize webgl
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let color_al = gl.getAttribLocation(program, 'color');
+gl.enableVertexAttribArray(color_al);
+
+gl.enable(gl.DEPTH_TEST);
+
+// prettier-ignore
+let cube_data: StaticArray> = [
+ // front face
+ // X Y Z R G B
+ [
+ -0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
+ -0.5, 0.5, 0.5, 1.0, 0.0, 0.0,
+ 0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
+ 0.5, 0.5, 0.5, 1.0, 0.0, 0.0,
+ ],
+ // back face
+ [
+ -0.5, -0.5, -0.5, 0.0, 1.0, 0.0,
+ -0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
+ 0.5, -0.5, -0.5, 0.0, 1.0, 0.0,
+ 0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
+ ],
+ // left face
+ [
+ -0.5, -0.5, -0.5, 0.0, 0.0, 1.0,
+ -0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
+ -0.5, 0.5, -0.5, 0.0, 0.0, 1.0,
+ -0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
+ ],
+ // right face
+ [
+ 0.5, -0.5, -0.5, 1.0, 0.7, 0.0,
+ 0.5, -0.5, 0.5, 1.0, 0.7, 0.0,
+ 0.5, 0.5, -0.5, 1.0, 0.7, 0.0,
+ 0.5, 0.5, 0.5, 1.0, 0.7, 0.0,
+ ],
+ // top face
+ [
+ -0.5, 0.5, -0.5, 1.0, 0.0, 0.7,
+ -0.5, 0.5, 0.5, 1.0, 0.0, 0.7,
+ 0.5, 0.5, -0.5, 1.0, 0.0, 0.7,
+ 0.5, 0.5, 0.5, 1.0, 0.0, 0.7,
+ ],
+ // bottom face
+ [
+ -0.5, -0.5, -0.5, 0.0, 1.0, 0.7,
+ -0.5, -0.5, 0.5, 0.0, 1.0, 0.7,
+ 0.5, -0.5, -0.5, 0.0, 1.0, 0.7,
+ 0.5, -0.5, 0.5, 0.0, 1.0, 0.7,
+ ]
+];
+
+function rotate(theta: f32): void {
+ for (var i: i32 = 0; i < cube_data.length; i++) {
+ for (var coord_i: i32 = 0; coord_i < cube_data[i].length; coord_i += 6) {
+ let x: f32 = cube_data[i][coord_i];
+ let z: f32 = cube_data[i][coord_i + 2];
+
+ let x1: f32 = x * Mathf.cos(theta) - z * Mathf.sin(theta);
+
+ let z1: f32 = z * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ cube_data[i][coord_i] = x1;
+ cube_data[i][coord_i + 2] = z1;
+ }
+ }
+ return;
+}
+
+export function displayLoop(delta: i32): void {
+ let r: f32 = delta / 10000.0;
+ rotate(r);
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+ for (var i: i32 = 0; i < 6; i++) {
+ gl.bufferData(gl.ARRAY_BUFFER, cube_data[i], gl.DYNAMIC_DRAW);
+ // dimensions | data_type | normalize | stride | offset
+ gl.vertexAttribPointer(position_al, 3, gl.FLOAT, +false, 24, 0);
+ gl.vertexAttribPointer(color_al, 3, gl.FLOAT, +false, 24, 12);
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+ }
+}
diff --git a/aswebglue/examples/Cube/index.html b/aswebglue/examples/Cube/index.html
new file mode 100644
index 0000000..7f57cb2
--- /dev/null
+++ b/aswebglue/examples/Cube/index.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ Cube Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/HelloWorldTriangle/README.md b/aswebglue/examples/HelloWorldTriangle/README.md
new file mode 100644
index 0000000..e312818
--- /dev/null
+++ b/aswebglue/examples/HelloWorldTriangle/README.md
@@ -0,0 +1,7 @@
+#Hello World Triangle
+
+The triangle is the most basic of graphical programs. When I have read a books on OpenGL / WebGL / DirectX, they always begin with a program that draws a simple triangle.
+
+```
+asc triangle.asc --extension asc --runtime stub --importMemory -o triangle.wasm
+```
\ No newline at end of file
diff --git a/aswebglue/examples/HelloWorldTriangle/index.html b/aswebglue/examples/HelloWorldTriangle/index.html
new file mode 100644
index 0000000..434ec6a
--- /dev/null
+++ b/aswebglue/examples/HelloWorldTriangle/index.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+ Hello World Triangle Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/HelloWorldTriangle/triangle.ts b/aswebglue/examples/HelloWorldTriangle/triangle.ts
new file mode 100644
index 0000000..c2cc90a
--- /dev/null
+++ b/aswebglue/examples/HelloWorldTriangle/triangle.ts
@@ -0,0 +1,71 @@
+/**
+ * @author Rick Battagline / https://embed.com/wasm
+ */
+
+import {WebGLRenderingContext, WebGLShader, WebGLProgram, WebGLBuffer, GLint} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = /*glsl*/ `#version 300 es
+ precision highp float;
+
+ in vec2 position;
+
+ void main() {
+ gl_Position = vec4( position, 0.0, 1.0 );
+ }
+`;
+
+const FRAGMENT_SHADER_CODE: string = /*glsl*/ `#version 300 es
+ precision highp float;
+ out vec4 color;
+
+ void main() {
+ color = vec4( 1.0, 0.0, 0.0, 1.0 );
+ }
+`;
+
+// initialize webgl
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+// prettier-ignore
+let triangle_data: StaticArray = [
+ 0.0, 0.5,
+ -0.5, -0.5,
+ 0.5, -0.5,
+];
+
+export function displayLoop(): void {
+ // R G B A
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gl.bufferData(gl.ARRAY_BUFFER, triangle_data, gl.STATIC_DRAW);
+
+ // attribute | dimensions | data_type | normalize | stride | offset
+ gl.vertexAttribPointer(position_al, 2, gl.FLOAT, +false, 0, 0);
+
+ // mode | first vertex | count
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 3);
+}
diff --git a/aswebglue/examples/InstancedSprites/README.md b/aswebglue/examples/InstancedSprites/README.md
new file mode 100644
index 0000000..52b0635
--- /dev/null
+++ b/aswebglue/examples/InstancedSprites/README.md
@@ -0,0 +1,5 @@
+# Instanced Sprites
+
+# Instanced Sprites
+
+This demo uses instanced rendering to render 500,000 sprites at once.
\ No newline at end of file
diff --git a/aswebglue/examples/InstancedSprites/index.html b/aswebglue/examples/InstancedSprites/index.html
new file mode 100644
index 0000000..ac59a1b
--- /dev/null
+++ b/aswebglue/examples/InstancedSprites/index.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+ Instanced Sprites Example
+
+
+
+
+ sprites: fps: 0
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/InstancedSprites/instanced_sprites.ts b/aswebglue/examples/InstancedSprites/instanced_sprites.ts
new file mode 100644
index 0000000..9bda737
--- /dev/null
+++ b/aswebglue/examples/InstancedSprites/instanced_sprites.ts
@@ -0,0 +1,234 @@
+/**
+ * @author Rick Battagline / https://embed.com
+ */
+
+// prettier-ignore
+import {
+ FRAGMENT_SHADER, VERTEX_SHADER, ARRAY_BUFFER, DYNAMIC_DRAW,
+ STATIC_DRAW, FLOAT, FALSE, COLOR_BUFFER_BIT, TRIANGLES,
+ UNPACK_FLIP_Y_WEBGL, UNPACK_PREMULTIPLY_ALPHA_WEBGL,
+ SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DEPTH_TEST, BLEND, STENCIL_TEST,
+ TEXTURE0, TEXTURE_2D, TEXTURE_MAG_FILTER, NEAREST,
+ TEXTURE_MIN_FILTER, RGBA, UNSIGNED_BYTE, CULL_FACE,
+ clearColor, clear, imageReady, pixelStorei,
+ uniform1i, drawArraysInstanced, createImage,
+ bindTexture, texParameteri, texImage2D,
+ blendFunc, disable, enable, activeTexture,
+ createShader, bindBuffer, getAttribLocation,
+ vertexAttribPointer, vertexAttribDivisor,
+ bindVertexArray, enableVertexAttribArray,
+ createBuffer, bufferData, createVertexArray,
+ shaderSource, compileShader, createProgram,
+ attachShader, linkProgram, useProgram,
+ createTexture, getUniformLocation, viewport,
+ createContextFromCanvas, WebGLRenderingContextId,
+ WebGLShader, ImageData, WebGLUniformLocation,
+ WebGLBuffer, GLint, WebGLProgram, WebGLTexture, WebGLVertexArrayObject,
+} from "../../WebGL";
+
+const VERTEX_SHADER_CODE: string = /*glsl*/ `#version 300 es
+precision mediump float;
+layout (location = 0) in vec2 objPosition;
+layout (location = 1) in vec2 position;
+layout (location = 2) in vec2 tex_coord;
+
+out vec2 tc;
+
+// 1. 0.0, 0.0 to 0.5, 0.5
+// 2. 0.5, 0.0 to 1.0, 0.5
+// 3. 0.0, 0.5 to 0.5, 1.0
+// 4. 0.5, 0.5 to 1.0, 1.0
+const float u_start[4] = float[4](0.0, 0.5, 0.0, 0.5);
+const float v_start[4] = float[4](0.0, 0.0, 0.5, 0.5);
+
+void main() {
+
+ gl_Position = vec4(position+objPosition, 0.0, 1.0);
+ // gl_InstanceID
+ int instance_sprite = gl_InstanceID & 3;
+ tc.x = tex_coord.x * 0.5 + u_start[instance_sprite];
+ tc.y = tex_coord.y * 0.5 + v_start[instance_sprite];
+}
+`; /* end vertex shader */
+
+const FRAGMENT_SHADER_CODE: string = /*glsl*/ `#version 300 es
+precision mediump float;
+in vec2 tc;
+
+uniform sampler2D sampler;
+
+out vec4 color;
+
+void main() {
+ color = texture( sampler, tc );
+}
+`; /* end fragment shader */
+
+// initialize webgl
+const kaijunicornMax: i32 = 1_000_000;
+var kaijunicornCount: i32 = 0;
+
+var gl: usize = createContextFromCanvas('cnvs', 'webgl2');
+
+var image_id: ImageData = createImage('kaijunicorn-sheet.png');
+var image_ready: bool = false;
+
+let vertex_shader: WebGLShader = createShader(gl, VERTEX_SHADER);
+shaderSource(gl, vertex_shader, VERTEX_SHADER_CODE);
+compileShader(gl, vertex_shader);
+
+let fragment_shader: WebGLShader = createShader(gl, FRAGMENT_SHADER);
+shaderSource(gl, fragment_shader, FRAGMENT_SHADER_CODE);
+compileShader(gl, fragment_shader);
+
+let program: WebGLProgram = createProgram(gl);
+
+attachShader(gl, program, vertex_shader);
+attachShader(gl, program, fragment_shader);
+
+linkProgram(gl, program);
+
+useProgram(gl, program);
+
+let buffer: WebGLBuffer = createBuffer(gl);
+bindBuffer(gl, ARRAY_BUFFER, buffer);
+
+let position_al: GLint = getAttribLocation(gl, program, 'position');
+let obj_position_al: GLint = getAttribLocation(gl, program, 'objPosition');
+let tex_coord_al: GLint = getAttribLocation(gl, program, 'tex_coord');
+
+// prettier-ignore
+let quad_data: StaticArray = [
+ // x y u v
+ -0.05, 0.05, 0.0, 1.0,
+ -0.05, -0.05, 0.0, 0.0,
+ 0.05, -0.05, 1.0, 0.0,
+
+ -0.05, 0.05, 0.0, 1.0,
+ 0.05, -0.05, 1.0, 0.0,
+ 0.05, 0.05, 1.0, 1.0,
+];
+
+let translation: StaticArray = new StaticArray(kaijunicornMax * 2);
+
+class Kaijunicorn {
+ static COUNT: i32 = 0;
+ public index: i32 = 0;
+ public dx: f32;
+ public dy: f32;
+
+ @inline set x(val: f32) {
+ unchecked(translation[this.index << 1] = val);
+ }
+
+ @inline get x(): f32 {
+ return unchecked(translation[this.index << 1]);
+ }
+
+ @inline set y(val: f32) {
+ unchecked(translation[(this.index << 1) + 1] = val);
+ }
+
+ @inline get y(): f32 {
+ return unchecked(translation[(this.index << 1) + 1]);
+ }
+
+ constructor() {
+ this.index = Kaijunicorn.COUNT++;
+
+ this.dx = Mathf.random() / 50.0 - 0.01;
+ this.dy = Mathf.random() / 50.0 - 0.01;
+ }
+
+ @inline Move(): void {
+ this.x += this.dx;
+ this.y += this.dy;
+
+ this.x %= 1.1;
+ this.y %= 1.1;
+ }
+}
+
+var KaijunicornArray: StaticArray = new StaticArray(kaijunicornMax);
+
+for (var i: i32 = 0; i < kaijunicornMax; i++) {
+ KaijunicornArray[i] = new Kaijunicorn();
+}
+
+let texture: WebGLTexture = createTexture(gl);
+let sampler: WebGLUniformLocation = getUniformLocation(gl, program, 'sampler');
+
+var quadVAO: WebGLVertexArrayObject;
+var quadVBO: WebGLBuffer;
+var instanceVBO: WebGLBuffer;
+
+export function init(): void {
+ viewport(gl, 0, 0, 640, 640);
+ instanceVBO = createBuffer(gl);
+
+ bindBuffer(gl, ARRAY_BUFFER, instanceVBO);
+ bufferData(gl, ARRAY_BUFFER, translation, DYNAMIC_DRAW);
+
+ quadVAO = createVertexArray(gl);
+ quadVBO = createBuffer(gl);
+
+ bindVertexArray(gl, quadVAO);
+ bindBuffer(gl, ARRAY_BUFFER, quadVBO);
+ bufferData(gl, ARRAY_BUFFER, quad_data, STATIC_DRAW);
+
+ enableVertexAttribArray(gl, position_al);
+ vertexAttribPointer(gl, position_al, 2, FLOAT, FALSE, 16, 0);
+
+ enableVertexAttribArray(gl, tex_coord_al);
+ vertexAttribPointer(gl, tex_coord_al, 2, FLOAT, FALSE, 16, 8);
+
+ bindBuffer(gl, ARRAY_BUFFER, instanceVBO);
+
+ enableVertexAttribArray(gl, obj_position_al);
+ vertexAttribPointer(gl, obj_position_al, 2, FLOAT, FALSE, 0, 0);
+
+ bindBuffer(gl, ARRAY_BUFFER, 0);
+
+ vertexAttribDivisor(gl, 1, 1);
+}
+
+export function displayLoop(delta: i32): void {
+ clearColor(gl, 0.0, 0.0, 0.0, 1.0);
+ clear(gl, COLOR_BUFFER_BIT);
+
+ if (image_ready == false) {
+ if (imageReady(image_id) == false) {
+ return;
+ }
+
+ pixelStorei(gl, UNPACK_FLIP_Y_WEBGL, 1);
+ pixelStorei(gl, UNPACK_PREMULTIPLY_ALPHA_WEBGL, /*true*/1);
+ blendFunc(gl, SRC_ALPHA, ONE_MINUS_SRC_ALPHA);
+ disable(gl, DEPTH_TEST);
+ enable(gl, BLEND);
+ enable(gl, CULL_FACE);
+
+ activeTexture(gl, TEXTURE0);
+ bindTexture(gl, TEXTURE_2D, texture);
+ texParameteri(gl, TEXTURE_2D, TEXTURE_MIN_FILTER, NEAREST);
+ texParameteri(gl, TEXTURE_2D, TEXTURE_MAG_FILTER, NEAREST);
+ texImage2D(gl, TEXTURE_2D, 0, RGBA, RGBA, UNSIGNED_BYTE, image_id);
+
+ uniform1i(gl, sampler, 0);
+ image_ready = true;
+ }
+
+ if (kaijunicornCount < kaijunicornMax) {
+ kaijunicornCount += 500;
+ }
+
+ for (var i: i32 = 0; i < kaijunicornCount; i++) {
+ KaijunicornArray[i].Move();
+ }
+
+ bindBuffer(gl, ARRAY_BUFFER, instanceVBO);
+ bufferData(gl, ARRAY_BUFFER, translation, DYNAMIC_DRAW);
+
+ bindVertexArray(gl, quadVAO);
+ drawArraysInstanced(gl, TRIANGLES, 0, 6, kaijunicornCount);
+}
diff --git a/aswebglue/examples/InstancedSprites/kaijunicorn-mini.png b/aswebglue/examples/InstancedSprites/kaijunicorn-mini.png
new file mode 100644
index 0000000..b856f75
Binary files /dev/null and b/aswebglue/examples/InstancedSprites/kaijunicorn-mini.png differ
diff --git a/aswebglue/examples/InstancedSprites/kaijunicorn-sheet.png b/aswebglue/examples/InstancedSprites/kaijunicorn-sheet.png
new file mode 100644
index 0000000..cd24ee0
Binary files /dev/null and b/aswebglue/examples/InstancedSprites/kaijunicorn-sheet.png differ
diff --git a/aswebglue/examples/InstancedSprites/kaijunicorn.png b/aswebglue/examples/InstancedSprites/kaijunicorn.png
new file mode 100644
index 0000000..c117d83
Binary files /dev/null and b/aswebglue/examples/InstancedSprites/kaijunicorn.png differ
diff --git a/aswebglue/examples/Lines/index.html b/aswebglue/examples/Lines/index.html
new file mode 100644
index 0000000..bcaf5e3
--- /dev/null
+++ b/aswebglue/examples/Lines/index.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+ WebGL Line Drawing Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/Lines/render_lines.ts b/aswebglue/examples/Lines/render_lines.ts
new file mode 100644
index 0000000..70f345b
--- /dev/null
+++ b/aswebglue/examples/Lines/render_lines.ts
@@ -0,0 +1,150 @@
+import {WebGLRenderingContext, WebGLShader, WebGLProgram, WebGLBuffer, GLint, WebGLUniformLocation} from '../../WebGL';
+
+const V_COLOR_LINE_SHADER: string = /*glsl*/ `#version 300 es
+ precision highp float;
+
+ uniform vec4 u_color;
+
+ in vec2 position;
+ out vec4 c;
+
+ void main() {
+ gl_Position = vec4( position, 0.0, 1.0 );
+ c = u_color/255.0;
+ }
+`;
+
+// THIS IS THE FRAGMENT SHADER
+const F_SHADER: string = /*glsl*/ `#version 300 es
+ precision highp float;
+
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+var theta: f32 = 0.0;
+
+var loop_color: StaticArray> = [
+ [0.0, 255.0, 0.0, 255.0], // default layer color
+ [255.0, 255.0, 0.0, 255.0], // cockpit layer color
+ [0.0, 255.0, 0.0, 255.0], // wings layer color
+ [0.0, 255.0, 0.0, 255.0], // wings2 layer color
+ [255.0, 0.0, 0.0, 255.0], // engine layer color
+ [0.0, 255.0, 0.0, 255.0], // recoloration layer color
+];
+
+var program_id: i32 = -1;
+var default_layer: StaticArray = [-0.1, 0.4, -0.2, 0, 0, -0.3, 0.2, 0, 0.1, 0.4, 0.2, 0.3, 0, 0.9, -0.2, 0.3];
+
+var cockpit_layer: StaticArray = [-0.1, 0.1, 0, 0.6, 0.1, 0.1];
+
+var wings_layer: StaticArray = [0.7, 0.2, 0.2, 0, 0, -0.3];
+
+var wings2_layer: StaticArray = [0, -0.3, -0.2, 0, -0.7, 0.2];
+
+var engine_layer: StaticArray = [-0.1, -0.2, -0.1, -0.3, 0.1, -0.3, 0.1, -0.2, 0, -0.6];
+
+var recoloration_layer: StaticArray = [0.2, 0, 0, -0.3, -0.2, 0, 0, -0.3];
+
+var layer_array: StaticArray> = [
+ default_layer,
+ cockpit_layer,
+ wings_layer,
+ wings2_layer,
+ engine_layer,
+ recoloration_layer,
+];
+
+var color_line_program: WebGLProgram;
+var gl: WebGLRenderingContext;
+
+export function init(): void {
+ gl = new WebGLRenderingContext('cnvs', 'webgl2');
+ let color_line_vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+ gl.shaderSource(color_line_vertex_shader, V_COLOR_LINE_SHADER);
+ gl.compileShader(color_line_vertex_shader);
+
+ let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+ gl.shaderSource(fragment_shader, F_SHADER);
+ gl.compileShader(fragment_shader);
+
+ color_line_program = gl.createProgram();
+
+ gl.attachShader(color_line_program, color_line_vertex_shader);
+ gl.attachShader(color_line_program, fragment_shader);
+
+ gl.linkProgram(color_line_program);
+
+ gl.useProgram(color_line_program);
+ // could use mutable import
+ // let color_location: WebGLUniformLocation = getUniformLocation(gl, color_line_program, "u_color");
+}
+/*Array*/
+function drawLines(line_data: StaticArray, color_data: StaticArray): void {
+ let buffer: WebGLBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+ store(changetype(line_data) - 8, idof>());
+ gl.bufferData(gl.ARRAY_BUFFER, line_data, gl.STATIC_DRAW);
+
+ let position_al: GLint = gl.getAttribLocation(color_line_program, 'position');
+ gl.enableVertexAttribArray(position_al);
+
+ let color_location: WebGLUniformLocation = gl.getUniformLocation(color_line_program, 'u_color');
+ store(changetype(color_data) - 8, idof>());
+ gl.uniform4fv(color_location, color_data);
+
+ const dimensions: i32 = 2;
+ const data_type: i32 = gl.FLOAT;
+ const normalize: i32 = +false;
+ const stride: i32 = 0;
+ const offset: i32 = 0;
+
+ gl.vertexAttribPointer(position_al, dimensions, data_type, normalize, stride, offset);
+
+ gl.drawArrays(gl.LINE_LOOP, 0, line_data.length / 2);
+}
+
+export function animation_frame(): void {
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ theta += 0.01;
+ if (theta >= 6.28318) {
+ theta = 0.0;
+ }
+
+ animation(0.001);
+
+ for (var i: i32 = 0; i < layer_array.length; i++) {
+ let loop_size: i32 = layer_array[i].length;
+
+ let layer: StaticArray = layer_array[i]; //,
+ let color: StaticArray = loop_color[i];
+
+ drawLines(layer, color);
+ }
+}
+
+export function animation(theta: f32): void {
+ for (var ship_i: i32 = 0; ship_i < layer_array.length; ship_i++) {
+ const layer = layer_array[ship_i];
+ const ship_loop_size = layer.length;
+
+ for (var coord_i: i32 = 0; coord_i < ship_loop_size; coord_i += 2) {
+ let x: f32 = layer[coord_i];
+ let y: f32 = layer[coord_i + 1];
+
+ let x1: f32 = x * Math.cos(theta) - y * Math.sin(theta);
+
+ let y1: f32 = y * Math.cos(theta) + x * Math.sin(theta);
+
+ layer[coord_i] = x1;
+ layer[coord_i + 1] = y1;
+ }
+ }
+ return;
+}
diff --git a/aswebglue/examples/Material/Robot.ts b/aswebglue/examples/Material/Robot.ts
new file mode 100644
index 0000000..0ac07dc
--- /dev/null
+++ b/aswebglue/examples/Material/Robot.ts
@@ -0,0 +1,656 @@
+
+export class VertGroup {
+ mat_index: i32;
+ obj_index: i32;
+ start_face: i32;
+ length: i32;
+
+ constructor(material_index: i32, object_index: i32, starting_face: i32, len: i32) {
+ this.mat_index = material_index;
+ this.obj_index = object_index;
+ this.start_face = starting_face;
+ this.length = len;
+ }
+}
+
+export var objArray = new Array>(); //1
+export var matArray = new Array>(); //3
+export var groupArray = new Array(); //0
+
+export var GrayMaterial_mat: StaticArray = [
+ 323.999994, // specularExponent
+ 1.000000, 1.000000, 1.000000, // ambientReflectivity
+ 0.100000, 0.100000, 0.150000, // diffuseReflectivity
+ 0.500000, 0.500000, 0.500000, // specularReflectivity
+ 0.000000, 0.000000, 0.000000, // emission
+ 1.450000, // opticalDensity
+ 1.000000, // dissolveFactor
+ 2, // illuminationModel
+];
+
+matArray.push(GrayMaterial_mat);
+
+export var RedMaterial_mat: StaticArray = [
+ 225.000000, // specularExponent
+ 1.000000, 1.000000, 1.000000, // ambientReflectivity
+ 1.000000, 0.000000, 0.000000, // diffuseReflectivity
+ 0.500000, 0.500000, 0.500000, // specularReflectivity
+ 0.000000, 0.000000, 0.000000, // emission
+ 1.450000, // opticalDensity
+ 1.000000, // dissolveFactor
+ 2, // illuminationModel
+];
+
+matArray.push(RedMaterial_mat);
+
+export var BlueMaterial_mat: StaticArray = [
+ 225.000000, // specularExponent
+ 1.000000, 1.000000, 1.000000, // ambientReflectivity
+ 0.000000, 0.000000, 1.000000, // diffuseReflectivity
+ 0.500000, 0.500000, 0.500000, // specularReflectivity
+ 0.000000, 0.000000, 0.000000, // emission
+ 1.450000, // opticalDensity
+ 1.000000, // dissolveFactor
+ 2, // illuminationModel
+];
+
+matArray.push(BlueMaterial_mat);
+
+
+export var Robot_data: StaticArray = [
+ //X, Y, Z, U, V, NX, NY, NZ
+ -0.1, 0.1, -0.1, 0.625, 0.25, 0, 0.2651, -0.9642,
+ 0.03964, 0.319577, -0.03964, 0.625, 0.5, 0, 0.2651, -0.9642,
+ 0.1, 0.1, -0.1, 0.625, 0.5, 0, 0.2651, -0.9642,
+ 0.1, 0.1, 0.1, 0.625, 0.75, 0, 0, 1,
+ -0.1, -0.1, 0.1, 0.375, 1, 0, 0, 1,
+ 0.1, -0.1, 0.1, 0.375, 0.75, 0, 0, 1,
+ -0.1, 0.1, 0.1, 0.625, 0, -1, 0, 0,
+ -0.1, -0.1, -0.1, 0.375, 0.25, -1, 0, 0,
+ -0.1, -0.1, 0.1, 0.375, 0, -1, 0, 0,
+ 0.1, -0.1, -0.1, 0.375, 0.5, 0, -1, 0,
+ -0.1, -0.1, 0.1, 0.125, 0.75, 0, -1, 0,
+ -0.1, -0.1, -0.1, 0.125, 0.5, 0, -1, 0,
+ 0.1, 0.1, -0.1, 0.625, 0.5, 1, 0, 0,
+ 0.1, -0.1, 0.1, 0.375, 0.75, 1, 0, 0,
+ 0.1, -0.1, -0.1, 0.375, 0.5, 1, 0, 0,
+ -0.1, 0.1, -0.1, 0.625, 0.25, 0, 0, -1,
+ 0.1, -0.1, -0.1, 0.375, 0.5, 0, 0, -1,
+ -0.1, -0.1, -0.1, 0.375, 0.25, 0, 0, -1,
+ 0.1, 0.1, 0.1, 0.625, 0.75, 0, 0.2651, 0.9642,
+ -0.03964, 0.319577, 0.03964, 0.625, 1, 0, 0.2651, 0.9642,
+ -0.1, 0.1, 0.1, 0.625, 1, 0, 0.2651, 0.9642,
+ -0.1, 0.1, 0.1, 0.625, 0, -0.9642, 0.2651, 0,
+ -0.03964, 0.319577, -0.03964, 0.625, 0.25, -0.9642, 0.2651, 0,
+ -0.1, 0.1, -0.1, 0.625, 0.25, -0.9642, 0.2651, 0,
+ 0.1, 0.1, -0.1, 0.625, 0.5, 0.9642, 0.2651, 0,
+ 0.03964, 0.319577, 0.03964, 0.625, 0.75, 0.9642, 0.2651, 0,
+ 0.1, 0.1, 0.1, 0.625, 0.75, 0.9642, 0.2651, 0,
+ -0.070778, 0.465943, -0.070778, 0.625, 0.25, 0, 0, -1,
+ 0.070778, 0.574785, -0.070778, 0.625, 0.5, 0, 0, -1,
+ 0.070778, 0.465943, -0.070778, 0.625, 0.5, 0, 0, -1,
+ -0.070778, 0.574785, 0.070778, 0.625, 0, -0.6461, 0.7632, 0,
+ -0.036361, 0.603924, -0.036361, 0.625, 0.25, -0.6461, 0.7632, 0,
+ -0.070778, 0.574785, -0.070778, 0.625, 0.25, -0.6461, 0.7632, 0,
+ 0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.7408, 0, 0.6717,
+ 0.098092, 0.551623, 0.040654, 0.625, 0.75, 0.7408, 0, 0.6717,
+ 0.070778, 0.574785, 0.070778, 0.625, 0.75, 0.7408, 0, 0.6717,
+ -0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.7408, 0, -0.6717,
+ -0.098092, 0.551623, -0.040654, 0.625, 0.25, -0.7408, 0, -0.6717,
+ -0.070778, 0.574785, -0.070778, 0.625, 0.25, -0.7408, 0, -0.6717,
+ 0.070778, 0.465943, 0.070778, 0.625, 0.75, 0, 0, 1,
+ -0.070778, 0.574785, 0.070778, 0.625, 1, 0, 0, 1,
+ -0.070778, 0.465943, 0.070778, 0.625, 1, 0, 0, 1,
+ 0.036361, 0.603924, 0.036361, 0.625, 0.75, 0, 0, 1,
+ -0.036361, 0.622896, 0.036361, 0.625, 1, 0, 0, 1,
+ -0.036361, 0.603924, 0.036361, 0.625, 1, 0, 0, 1,
+ 0.070778, 0.574785, 0.070778, 0.625, 0.75, 0, 0.7632, 0.6461,
+ -0.036361, 0.603924, 0.036361, 0.625, 1, 0, 0.7632, 0.6461,
+ -0.070778, 0.574785, 0.070778, 0.625, 1, 0, 0.7632, 0.6461,
+ -0.070778, 0.574785, -0.070778, 0.625, 0.25, 0, 0.7632, -0.6461,
+ 0.036361, 0.603924, -0.036361, 0.625, 0.5, 0, 0.7632, -0.6461,
+ 0.070778, 0.574785, -0.070778, 0.625, 0.5, 0, 0.7632, -0.6461,
+ 0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.6461, 0.7632, 0,
+ 0.036361, 0.603924, 0.036361, 0.625, 0.75, 0.6461, 0.7632, 0,
+ 0.070778, 0.574785, 0.070778, 0.625, 0.75, 0.6461, 0.7632, 0,
+ -0.036361, 0.622896, -0.036361, 0.625, 0.25, 0, -0.6177, -0.7864,
+ 0.052774, 0.643794, -0.052774, 0.625, 0.5, 0, -0.6177, -0.7864,
+ 0.036361, 0.622896, -0.036361, 0.625, 0.5, 0, -0.6177, -0.7864,
+ -0.036361, 0.603924, -0.036361, 0.625, 0.25, 0, 0, -1,
+ 0.036361, 0.622896, -0.036361, 0.625, 0.5, 0, 0, -1,
+ 0.036361, 0.603924, -0.036361, 0.625, 0.5, 0, 0, -1,
+ 0.036361, 0.603924, -0.036361, 0.625, 0.5, 1, 0, 0,
+ 0.036361, 0.622896, 0.036361, 0.625, 0.75, 1, 0, 0,
+ 0.036361, 0.603924, 0.036361, 0.625, 0.75, 1, 0, 0,
+ -0.036361, 0.603924, 0.036361, 0.625, 0, -1, 0, 0,
+ -0.036361, 0.622896, -0.036361, 0.625, 0.25, -1, 0, 0,
+ -0.036361, 0.603924, -0.036361, 0.625, 0.25, -1, 0, 0,
+ 0.036361, 0.622896, -0.036361, 0.625, 0.5, 0.7864, -0.6177, 0,
+ 0.052774, 0.643794, 0.052774, 0.625, 0.75, 0.7864, -0.6177, 0,
+ 0.036361, 0.622896, 0.036361, 0.625, 0.75, 0.7864, -0.6177, 0,
+ -0.036361, 0.622896, 0.036361, 0.625, 0, -0.7864, -0.6177, 0,
+ -0.052774, 0.643794, -0.052774, 0.625, 0.25, -0.7864, -0.6177, 0,
+ -0.036361, 0.622896, -0.036361, 0.625, 0.25, -0.7864, -0.6177, 0,
+ 0.036361, 0.622896, 0.036361, 0.625, 0.75, 0, -0.6177, 0.7864,
+ -0.052774, 0.643794, 0.052774, 0.625, 1, 0, -0.6177, 0.7864,
+ -0.036361, 0.622896, 0.036361, 0.625, 1, 0, -0.6177, 0.7864,
+ -0.058197, 0.722006, -0.058197, 0.625, 0.25, 0, 0.5681, -0.8229,
+ 0.028575, 0.764915, -0.028575, 0.625, 0.5, 0, 0.5681, -0.8229,
+ 0.058197, 0.722006, -0.058197, 0.625, 0.5, 0, 0.5681, -0.8229,
+ 0.052774, 0.643794, 0.052774, 0.625, 0.75, 0, -0.0692, 0.9976,
+ -0.058197, 0.722006, 0.058197, 0.625, 1, 0, -0.0692, 0.9976,
+ -0.052774, 0.643794, 0.052774, 0.625, 1, 0, -0.0692, 0.9976,
+ -0.028575, 0.764915, -0.028575, 0.875, 0.5, 0, 1, 0,
+ 0.028575, 0.764915, 0.028575, 0.625, 0.75, 0, 1, 0,
+ 0.028575, 0.764915, -0.028575, 0.625, 0.5, 0, 1, 0,
+ 0.058197, 0.722006, -0.058197, 0.625, 0.5, 0.8229, 0.5681, 0,
+ 0.028575, 0.764915, 0.028575, 0.625, 0.75, 0.8229, 0.5681, 0,
+ 0.058197, 0.722006, 0.058197, 0.625, 0.75, 0.8229, 0.5681, 0,
+ -0.058197, 0.722006, 0.058197, 0.625, 0, -0.8229, 0.5681, 0,
+ -0.028575, 0.764915, -0.028575, 0.625, 0.25, -0.8229, 0.5681, 0,
+ -0.058197, 0.722006, -0.058197, 0.625, 0.25, -0.8229, 0.5681, 0,
+ 0.058197, 0.722006, 0.058197, 0.625, 0.75, 0, 0.5681, 0.8229,
+ -0.028575, 0.764915, 0.028575, 0.625, 1, 0, 0.5681, 0.8229,
+ -0.058197, 0.722006, 0.058197, 0.625, 1, 0, 0.5681, 0.8229,
+ 0.098092, 0.551623, -0.040654, 0.625, 0.5, 0, 0, -1,
+ 0.128092, 0.489106, -0.040654, 0.625, 0.5, 0, 0, -1,
+ 0.098092, 0.489106, -0.040654, 0.625, 0.5, 0, 0, -1,
+ 0.070778, 0.465943, -0.070778, 0.625, 0.5, 0.6468, -0.7627, 0,
+ 0.098092, 0.489106, 0.040654, 0.625, 0.75, 0.6468, -0.7627, 0,
+ 0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.6468, -0.7627, 0,
+ 0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.7408, 0, -0.6717,
+ 0.098092, 0.489106, -0.040654, 0.625, 0.5, 0.7408, 0, -0.6717,
+ 0.070778, 0.465943, -0.070778, 0.625, 0.5, 0.7408, 0, -0.6717,
+ 0.070778, 0.574785, 0.070778, 0.625, 0.75, 0.6468, 0.7627, 0,
+ 0.098092, 0.551623, -0.040654, 0.625, 0.5, 0.6468, 0.7627, 0,
+ 0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.6468, 0.7627, 0,
+ -0.098092, 0.551623, 0.040654, 0.625, 1, 0, 0, 1,
+ -0.128092, 0.489106, 0.040654, 0.625, 1, 0, 0, 1,
+ -0.098092, 0.489106, 0.040654, 0.625, 1, 0, 0, 1,
+ -0.070778, 0.574785, -0.070778, 0.625, 0.25, -0.6468, 0.7627, 0,
+ -0.098092, 0.551623, 0.040654, 0.625, 0, -0.6468, 0.7627, 0,
+ -0.070778, 0.574785, 0.070778, 0.625, 0, -0.6468, 0.7627, 0,
+ -0.070778, 0.574785, 0.070778, 0.625, 1, -0.7408, 0, 0.6717,
+ -0.098092, 0.489106, 0.040654, 0.625, 1, -0.7408, 0, 0.6717,
+ -0.070778, 0.465943, 0.070778, 0.625, 1, -0.7408, 0, 0.6717,
+ -0.070778, 0.465943, 0.070778, 0.625, 0, -0.6468, -0.7627, 0,
+ -0.098092, 0.489106, -0.040654, 0.625, 0.25, -0.6468, -0.7627, 0,
+ -0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.6468, -0.7627, 0,
+ -0.128092, 0.489106, 0.040654, 0.625, 0, -1, 0, 0,
+ -0.128092, 0.551623, -0.040654, 0.625, 0.25, -1, 0, 0,
+ -0.128092, 0.489106, -0.040654, 0.625, 0.25, -1, 0, 0,
+ -0.098092, 0.551623, -0.040654, 0.625, 0.25, 0, 1, 0,
+ -0.128092, 0.551623, 0.040654, 0.625, 0, 0, 1, 0,
+ -0.098092, 0.551623, 0.040654, 0.625, 0, 0, 1, 0,
+ -0.098092, 0.489106, -0.040654, 0.625, 0.25, 0, 0, -1,
+ -0.128092, 0.551623, -0.040654, 0.625, 0.25, 0, 0, -1,
+ -0.098092, 0.551623, -0.040654, 0.625, 0.25, 0, 0, -1,
+ 0.098092, 0.489106, -0.040654, 0.625, 0.5, -0.9978, -0.0665, 0,
+ 0.103989, 0.400565, 0.024672, 0.625, 0.75, -0.9978, -0.0665, 0,
+ 0.098092, 0.489106, 0.040654, 0.625, 0.75, -0.9978, -0.0665, 0,
+ 0.128092, 0.489106, -0.040654, 0.625, 0.5, 1, 0, 0,
+ 0.128092, 0.551623, 0.040654, 0.625, 0.75, 1, 0, 0,
+ 0.128092, 0.489106, 0.040654, 0.625, 0.75, 1, 0, 0,
+ 0.128092, 0.489106, 0.040654, 0.625, 0.75, 0.9978, -0.0665, 0,
+ 0.122195, 0.400565, -0.024672, 0.625, 0.5, 0.9978, -0.0665, 0,
+ 0.128092, 0.489106, -0.040654, 0.625, 0.5, 0.9978, -0.0665, 0,
+ 0.098092, 0.489106, 0.040654, 0.625, 0.75, 0, 0, 1,
+ 0.128092, 0.551623, 0.040654, 0.625, 0.75, 0, 0, 1,
+ 0.098092, 0.551623, 0.040654, 0.625, 0.75, 0, 0, 1,
+ 0.098092, 0.551623, 0.040654, 0.625, 0.75, 0, 1, 0,
+ 0.128092, 0.551623, -0.040654, 0.625, 0.5, 0, 1, 0,
+ 0.098092, 0.551623, -0.040654, 0.625, 0.5, 0, 1, 0,
+ -0.122195, 0.400565, 0.024672, 0.625, 1, 0, 0.239, 0.971,
+ -0.098092, 0.335624, 0.040654, 0.625, 1, 0, 0.239, 0.971,
+ -0.103989, 0.400565, 0.024672, 0.625, 1, 0, 0.239, 0.971,
+ 0.122195, 0.400565, 0.024672, 0.625, 0.75, 0.9921, 0.1251, 0,
+ 0.128092, 0.353791, -0.040654, 0.625, 0.5, 0.9921, 0.1251, 0,
+ 0.122195, 0.400565, -0.024672, 0.625, 0.5, 0.9921, 0.1251, 0,
+ 0.098092, 0.489106, -0.040654, 0.625, 0.5, 0, -0.1776, -0.9841,
+ 0.122195, 0.400565, -0.024672, 0.625, 0.5, 0, -0.1776, -0.9841,
+ 0.103989, 0.400565, -0.024672, 0.625, 0.5, 0, -0.1776, -0.9841,
+ -0.128092, 0.489106, -0.040654, 0.625, 0.25, -0.9978, -0.0665, 0,
+ -0.122195, 0.400565, 0.024672, 0.625, 0, -0.9978, -0.0665, 0,
+ -0.128092, 0.489106, 0.040654, 0.625, 0, -0.9978, -0.0665, 0,
+ -0.098092, 0.489106, -0.040654, 0.625, 0.25, 0, -0.1776, -0.9841,
+ -0.122195, 0.400565, -0.024672, 0.625, 0.25, 0, -0.1776, -0.9841,
+ -0.128092, 0.489106, -0.040654, 0.625, 0.25, 0, -0.1776, -0.9841,
+ -0.098092, 0.489106, 0.040654, 0.625, 1, 0, -0.1776, 0.9841,
+ -0.122195, 0.400565, 0.024672, 0.625, 1, 0, -0.1776, 0.9841,
+ -0.103989, 0.400565, 0.024672, 0.625, 1, 0, -0.1776, 0.9841,
+ 0.098092, 0.489106, 0.040654, 0.625, 0.75, 0, -0.1776, 0.9841,
+ 0.122195, 0.400565, 0.024672, 0.625, 0.75, 0, -0.1776, 0.9841,
+ 0.128092, 0.489106, 0.040654, 0.625, 0.75, 0, -0.1776, 0.9841,
+ -0.098092, 0.489106, 0.040654, 0.625, 0, 0.9978, -0.0665, 0,
+ -0.103989, 0.400565, -0.024672, 0.625, 0.25, 0.9978, -0.0665, 0,
+ -0.098092, 0.489106, -0.040654, 0.625, 0.25, 0.9978, -0.0665, 0,
+ 0.098092, 0.335624, 0.040654, 0.625, 0.75, 0, -0.6592, 0.752,
+ 0.128092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.6592, 0.752,
+ 0.128092, 0.335624, 0.040654, 0.625, 0.75, 0, -0.6592, 0.752,
+ 0.098092, 0.353791, -0.040654, 0.625, 0.5, -1, 0, 0,
+ 0.098092, 0.234285, -0.048174, 0.625, 0.75, -1, 0, 0,
+ 0.098092, 0.335624, 0.040654, 0.625, 0.75, -1, 0, 0,
+ -0.103989, 0.400565, 0.024672, 0.625, 0, 0.9921, 0.1251, 0,
+ -0.098092, 0.353791, -0.040654, 0.625, 0.25, 0.9921, 0.1251, 0,
+ -0.103989, 0.400565, -0.024672, 0.625, 0.25, 0.9921, 0.1251, 0,
+ 0.122195, 0.400565, -0.024672, 0.625, 0.5, 0, 0.3233, -0.9463,
+ 0.098092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3233, -0.9463,
+ 0.103989, 0.400565, -0.024672, 0.625, 0.5, 0, 0.3233, -0.9463,
+ -0.122195, 0.400565, -0.024672, 0.625, 0.25, 0, 0.3233, -0.9463,
+ -0.098092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3233, -0.9463,
+ -0.128092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3233, -0.9463,
+ -0.122195, 0.400565, 0.024672, 0.625, 0, -0.9952, 0.0956, 0.0214,
+ -0.128092, 0.353791, -0.040654, 0.625, 0.25, -0.9952, 0.0956, 0.0214,
+ -0.128092, 0.335624, 0.040654, 0.625, 0, -0.9952, 0.0956, 0.0214,
+ 0.103989, 0.400565, 0.024672, 0.625, 0.75, -0.9952, 0.0956, 0.0214,
+ 0.098092, 0.353791, -0.040654, 0.625, 0.5, -0.9952, 0.0956, 0.0214,
+ 0.098092, 0.335624, 0.040654, 0.625, 0.75, -0.9952, 0.0956, 0.0214,
+ 0.103989, 0.400565, 0.024672, 0.625, 0.75, 0, 0.239, 0.971,
+ 0.128092, 0.335624, 0.040654, 0.625, 0.75, 0, 0.239, 0.971,
+ 0.122195, 0.400565, 0.024672, 0.625, 0.75, 0, 0.239, 0.971,
+ -0.098092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.6843, -0.7292,
+ -0.128092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.6843, -0.7292,
+ -0.128092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.6843, -0.7292,
+ 0.128092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.6843, -0.7292,
+ 0.098092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.6843, -0.7292,
+ 0.098092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.6843, -0.7292,
+ 0.128092, 0.353791, -0.040654, 0.625, 0.5, 1, 0, 0,
+ 0.128092, 0.234285, -0.048174, 0.625, 0.75, 1, 0, 0,
+ 0.128092, 0.234285, -0.079572, 0.625, 0.5, 1, 0, 0,
+ -0.128092, 0.335624, 0.040654, 0.625, 1, 0, -0.6592, 0.752,
+ -0.098092, 0.234285, -0.048174, 0.625, 1, 0, -0.6592, 0.752,
+ -0.098092, 0.335624, 0.040654, 0.625, 1, 0, -0.6592, 0.752,
+ -0.098092, 0.353791, -0.040654, 0.625, 0.25, 1, 0, 0,
+ -0.098092, 0.234285, -0.048174, 0.625, 0, 1, 0, 0,
+ -0.098092, 0.234285, -0.079572, 0.625, 0.25, 1, 0, 0,
+ 0.128092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3097, -0.9509,
+ 0.098092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.3097, -0.9509,
+ 0.098092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3097, -0.9509,
+ -0.098092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3097, -0.9508,
+ -0.128092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.3097, -0.9508,
+ -0.128092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3097, -0.9508,
+ -0.128092, 0.353791, -0.040654, 0.625, 0.25, -1, 0, 0,
+ -0.128092, 0.234285, -0.048174, 0.625, 0, -1, 0, 0,
+ -0.128092, 0.335624, 0.040654, 0.625, 0, -1, 0, 0,
+ 0.098092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.1306, -0.9914,
+ 0.120592, 0.186814, -0.107362, 0.625, 0.5, 0, 0.1306, -0.9914,
+ 0.105592, 0.186814, -0.107362, 0.625, 0.5, 0, 0.1306, -0.9914,
+ -0.098092, 0.192117, -0.077302, 0.625, 0, 0.9329, -0.3135, -0.1774,
+ -0.105592, 0.186814, -0.107362, 0.625, 0.25, 0.9329, -0.3135, -0.1774,
+ -0.098092, 0.207583, -0.104626, 0.625, 0.25, 0.9329, -0.3135, -0.1774,
+ -0.128092, 0.234285, -0.079572, 0.625, 0.25, -1, 0, 0,
+ -0.128092, 0.192117, -0.077302, 0.625, 0, -1, 0, 0,
+ -0.128092, 0.234285, -0.048174, 0.625, 0, -1, 0, 0,
+ 0.098092, 0.234285, -0.079572, 0.625, 0.5, -1, 0, 0,
+ 0.098092, 0.192117, -0.077302, 0.625, 0.75, -1, 0, 0,
+ 0.098092, 0.234285, -0.048174, 0.625, 0.75, -1, 0, 0,
+ 0.098092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.5684, 0.8228,
+ 0.128092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.5684, 0.8228,
+ 0.128092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.5684, 0.8228,
+ 0.128092, 0.234285, -0.079572, 0.625, 0.5, 1, 0, 0,
+ 0.128092, 0.192117, -0.077302, 0.625, 0.75, 1, 0, 0,
+ 0.128092, 0.207583, -0.104626, 0.625, 0.5, 1, 0, 0,
+ -0.128092, 0.234285, -0.048174, 0.625, 1, 0, -0.5684, 0.8228,
+ -0.098092, 0.192117, -0.077302, 0.625, 1, 0, -0.5684, 0.8228,
+ -0.098092, 0.234285, -0.048174, 0.625, 1, 0, -0.5684, 0.8228,
+ -0.098092, 0.234285, -0.079572, 0.625, 0.25, 1, 0, 0,
+ -0.098092, 0.192117, -0.077302, 0.625, 0, 1, 0, 0,
+ -0.098092, 0.207583, -0.104626, 0.625, 0.25, 1, 0, 0,
+ -0.105592, 0.179081, -0.0937, 0.625, 0, 0, -0.8703, -0.4926,
+ -0.120592, 0.186814, -0.107362, 0.625, 0.25, 0, -0.8703, -0.4926,
+ -0.105592, 0.186814, -0.107362, 0.625, 0.25, 0, -0.8703, -0.4926,
+ 0.105592, 0.186814, -0.107362, 0.625, 0.5, 0, -0.8703, -0.4926,
+ 0.120592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.8703, -0.4926,
+ 0.105592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.8703, -0.4926,
+ -0.098092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.1306, -0.9914,
+ -0.120592, 0.186814, -0.107362, 0.625, 0.25, 0, 0.1306, -0.9914,
+ -0.128092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.1306, -0.9914,
+ -0.128092, 0.192117, -0.077302, 0.625, 0, -0.9329, -0.3135, -0.1774,
+ -0.120592, 0.186814, -0.107362, 0.625, 0.25, -0.9329, -0.3135, -0.1774,
+ -0.120592, 0.179081, -0.0937, 0.625, 0, -0.9329, -0.3135, -0.1774,
+ 0.098092, 0.192117, -0.077302, 0.625, 0.75, -0.9329, -0.3135, -0.1774,
+ 0.105592, 0.186814, -0.107362, 0.625, 0.5, -0.9329, -0.3135, -0.1774,
+ 0.105592, 0.179081, -0.0937, 0.625, 0.75, -0.9329, -0.3135, -0.1774,
+ 0.098092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.7828, 0.6223,
+ 0.120592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.7828, 0.6223,
+ 0.128092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.7828, 0.6223,
+ 0.128092, 0.192117, -0.077302, 0.625, 0.75, 0.9329, -0.3135, -0.1774,
+ 0.120592, 0.186814, -0.107362, 0.625, 0.5, 0.9329, -0.3135, -0.1774,
+ 0.128092, 0.207583, -0.104626, 0.625, 0.5, 0.9329, -0.3135, -0.1774,
+ -0.098092, 0.192117, -0.077302, 0.625, 1, 0, -0.7828, 0.6223,
+ -0.120592, 0.179081, -0.0937, 0.625, 1, 0, -0.7828, 0.6223,
+ -0.105592, 0.179081, -0.0937, 0.625, 1, 0, -0.7828, 0.6223,
+ -0.1, 0.1, -0.1, 0.625, 0.25, 0, 0.2651, -0.9642,
+ -0.03964, 0.319577, -0.03964, 0.625, 0.25, 0, 0.2651, -0.9642,
+ 0.03964, 0.319577, -0.03964, 0.625, 0.5, 0, 0.2651, -0.9642,
+ 0.1, 0.1, 0.1, 0.625, 0.75, 0, 0, 1,
+ -0.1, 0.1, 0.1, 0.625, 1, 0, 0, 1,
+ -0.1, -0.1, 0.1, 0.375, 1, 0, 0, 1,
+ -0.1, 0.1, 0.1, 0.625, 0, -1, 0, 0,
+ -0.1, 0.1, -0.1, 0.625, 0.25, -1, 0, 0,
+ -0.1, -0.1, -0.1, 0.375, 0.25, -1, 0, 0,
+ 0.1, -0.1, -0.1, 0.375, 0.5, 0, -1, 0,
+ 0.1, -0.1, 0.1, 0.375, 0.75, 0, -1, 0,
+ -0.1, -0.1, 0.1, 0.125, 0.75, 0, -1, 0,
+ 0.1, 0.1, -0.1, 0.625, 0.5, 1, 0, 0,
+ 0.1, 0.1, 0.1, 0.625, 0.75, 1, 0, 0,
+ 0.1, -0.1, 0.1, 0.375, 0.75, 1, 0, 0,
+ -0.1, 0.1, -0.1, 0.625, 0.25, 0, 0, -1,
+ 0.1, 0.1, -0.1, 0.625, 0.5, 0, 0, -1,
+ 0.1, -0.1, -0.1, 0.375, 0.5, 0, 0, -1,
+ 0.1, 0.1, 0.1, 0.625, 0.75, 0, 0.2651, 0.9642,
+ 0.03964, 0.319577, 0.03964, 0.625, 0.75, 0, 0.2651, 0.9642,
+ -0.03964, 0.319577, 0.03964, 0.625, 1, 0, 0.2651, 0.9642,
+ -0.1, 0.1, 0.1, 0.625, 0, -0.9642, 0.2651, 0,
+ -0.03964, 0.319577, 0.03964, 0.625, 0, -0.9642, 0.2651, 0,
+ -0.03964, 0.319577, -0.03964, 0.625, 0.25, -0.9642, 0.2651, 0,
+ 0.1, 0.1, -0.1, 0.625, 0.5, 0.9642, 0.2651, 0,
+ 0.03964, 0.319577, -0.03964, 0.625, 0.5, 0.9642, 0.2651, 0,
+ 0.03964, 0.319577, 0.03964, 0.625, 0.75, 0.9642, 0.2651, 0,
+ -0.070778, 0.465943, -0.070778, 0.625, 0.25, 0, 0, -1,
+ -0.070778, 0.574785, -0.070778, 0.625, 0.25, 0, 0, -1,
+ 0.070778, 0.574785, -0.070778, 0.625, 0.5, 0, 0, -1,
+ -0.070778, 0.574785, 0.070778, 0.625, 0, -0.6461, 0.7632, 0,
+ -0.036361, 0.603924, 0.036361, 0.625, 0, -0.6461, 0.7632, 0,
+ -0.036361, 0.603924, -0.036361, 0.625, 0.25, -0.6461, 0.7632, 0,
+ 0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.7408, 0, 0.6717,
+ 0.098092, 0.489106, 0.040654, 0.625, 0.75, 0.7408, 0, 0.6717,
+ 0.098092, 0.551623, 0.040654, 0.625, 0.75, 0.7408, 0, 0.6717,
+ -0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.7408, 0, -0.6717,
+ -0.098092, 0.489106, -0.040654, 0.625, 0.25, -0.7408, 0, -0.6717,
+ -0.098092, 0.551623, -0.040654, 0.625, 0.25, -0.7408, 0, -0.6717,
+ 0.070778, 0.465943, 0.070778, 0.625, 0.75, 0, 0, 1,
+ 0.070778, 0.574785, 0.070778, 0.625, 0.75, 0, 0, 1,
+ -0.070778, 0.574785, 0.070778, 0.625, 1, 0, 0, 1,
+ 0.036361, 0.603924, 0.036361, 0.625, 0.75, 0, 0, 1,
+ 0.036361, 0.622896, 0.036361, 0.625, 0.75, 0, 0, 1,
+ -0.036361, 0.622896, 0.036361, 0.625, 1, 0, 0, 1,
+ 0.070778, 0.574785, 0.070778, 0.625, 0.75, 0, 0.7632, 0.6461,
+ 0.036361, 0.603924, 0.036361, 0.625, 0.75, 0, 0.7632, 0.6461,
+ -0.036361, 0.603924, 0.036361, 0.625, 1, 0, 0.7632, 0.6461,
+ -0.070778, 0.574785, -0.070778, 0.625, 0.25, 0, 0.7632, -0.6461,
+ -0.036361, 0.603924, -0.036361, 0.625, 0.25, 0, 0.7632, -0.6461,
+ 0.036361, 0.603924, -0.036361, 0.625, 0.5, 0, 0.7632, -0.6461,
+ 0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.6461, 0.7632, 0,
+ 0.036361, 0.603924, -0.036361, 0.625, 0.5, 0.6461, 0.7632, 0,
+ 0.036361, 0.603924, 0.036361, 0.625, 0.75, 0.6461, 0.7632, 0,
+ -0.036361, 0.622896, -0.036361, 0.625, 0.25, 0, -0.6177, -0.7864,
+ -0.052774, 0.643794, -0.052774, 0.625, 0.25, 0, -0.6177, -0.7864,
+ 0.052774, 0.643794, -0.052774, 0.625, 0.5, 0, -0.6177, -0.7864,
+ -0.036361, 0.603924, -0.036361, 0.625, 0.25, 0, 0, -1,
+ -0.036361, 0.622896, -0.036361, 0.625, 0.25, 0, 0, -1,
+ 0.036361, 0.622896, -0.036361, 0.625, 0.5, 0, 0, -1,
+ 0.036361, 0.603924, -0.036361, 0.625, 0.5, 1, 0, 0,
+ 0.036361, 0.622896, -0.036361, 0.625, 0.5, 1, 0, 0,
+ 0.036361, 0.622896, 0.036361, 0.625, 0.75, 1, 0, 0,
+ -0.036361, 0.603924, 0.036361, 0.625, 0, -1, 0, 0,
+ -0.036361, 0.622896, 0.036361, 0.625, 0, -1, 0, 0,
+ -0.036361, 0.622896, -0.036361, 0.625, 0.25, -1, 0, 0,
+ 0.036361, 0.622896, -0.036361, 0.625, 0.5, 0.7864, -0.6177, 0,
+ 0.052774, 0.643794, -0.052774, 0.625, 0.5, 0.7864, -0.6177, 0,
+ 0.052774, 0.643794, 0.052774, 0.625, 0.75, 0.7864, -0.6177, 0,
+ -0.036361, 0.622896, 0.036361, 0.625, 0, -0.7864, -0.6177, 0,
+ -0.052774, 0.643794, 0.052774, 0.625, 0, -0.7864, -0.6177, 0,
+ -0.052774, 0.643794, -0.052774, 0.625, 0.25, -0.7864, -0.6177, 0,
+ 0.036361, 0.622896, 0.036361, 0.625, 0.75, 0, -0.6177, 0.7864,
+ 0.052774, 0.643794, 0.052774, 0.625, 0.75, 0, -0.6177, 0.7864,
+ -0.052774, 0.643794, 0.052774, 0.625, 1, 0, -0.6177, 0.7864,
+ -0.058197, 0.722006, -0.058197, 0.625, 0.25, 0, 0.5681, -0.8229,
+ -0.028575, 0.764915, -0.028575, 0.625, 0.25, 0, 0.5681, -0.8229,
+ 0.028575, 0.764915, -0.028575, 0.625, 0.5, 0, 0.5681, -0.8229,
+ 0.052774, 0.643794, 0.052774, 0.625, 0.75, 0, -0.0692, 0.9976,
+ 0.058197, 0.722006, 0.058197, 0.625, 0.75, 0, -0.0692, 0.9976,
+ -0.058197, 0.722006, 0.058197, 0.625, 1, 0, -0.0692, 0.9976,
+ -0.028575, 0.764915, -0.028575, 0.875, 0.5, 0, 1, 0,
+ -0.028575, 0.764915, 0.028575, 0.875, 0.75, 0, 1, 0,
+ 0.028575, 0.764915, 0.028575, 0.625, 0.75, 0, 1, 0,
+ 0.058197, 0.722006, -0.058197, 0.625, 0.5, 0.8229, 0.5681, 0,
+ 0.028575, 0.764915, -0.028575, 0.625, 0.5, 0.8229, 0.5681, 0,
+ 0.028575, 0.764915, 0.028575, 0.625, 0.75, 0.8229, 0.5681, 0,
+ -0.058197, 0.722006, 0.058197, 0.625, 0, -0.8229, 0.5681, 0,
+ -0.028575, 0.764915, 0.028575, 0.625, 0, -0.8229, 0.5681, 0,
+ -0.028575, 0.764915, -0.028575, 0.625, 0.25, -0.8229, 0.5681, 0,
+ 0.058197, 0.722006, 0.058197, 0.625, 0.75, 0, 0.5681, 0.8229,
+ 0.028575, 0.764915, 0.028575, 0.625, 0.75, 0, 0.5681, 0.8229,
+ -0.028575, 0.764915, 0.028575, 0.625, 1, 0, 0.5681, 0.8229,
+ 0.098092, 0.551623, -0.040654, 0.625, 0.5, 0, 0, -1,
+ 0.128092, 0.551623, -0.040654, 0.625, 0.5, 0, 0, -1,
+ 0.128092, 0.489106, -0.040654, 0.625, 0.5, 0, 0, -1,
+ 0.070778, 0.465943, -0.070778, 0.625, 0.5, 0.6468, -0.7627, 0,
+ 0.098092, 0.489106, -0.040654, 0.625, 0.5, 0.6468, -0.7627, 0,
+ 0.098092, 0.489106, 0.040654, 0.625, 0.75, 0.6468, -0.7627, 0,
+ 0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.7408, 0, -0.6717,
+ 0.098092, 0.551623, -0.040654, 0.625, 0.5, 0.7408, 0, -0.6717,
+ 0.098092, 0.489106, -0.040654, 0.625, 0.5, 0.7408, 0, -0.6717,
+ 0.070778, 0.574785, 0.070778, 0.625, 0.75, 0.6468, 0.7627, 0,
+ 0.098092, 0.551623, 0.040654, 0.625, 0.75, 0.6468, 0.7627, 0,
+ 0.098092, 0.551623, -0.040654, 0.625, 0.5, 0.6468, 0.7627, 0,
+ -0.098092, 0.551623, 0.040654, 0.625, 1, 0, 0, 1,
+ -0.128092, 0.551623, 0.040654, 0.625, 1, 0, 0, 1,
+ -0.128092, 0.489106, 0.040654, 0.625, 1, 0, 0, 1,
+ -0.070778, 0.574785, -0.070778, 0.625, 0.25, -0.6468, 0.7627, 0,
+ -0.098092, 0.551623, -0.040654, 0.625, 0.25, -0.6468, 0.7627, 0,
+ -0.098092, 0.551623, 0.040654, 0.625, 0, -0.6468, 0.7627, 0,
+ -0.070778, 0.574785, 0.070778, 0.625, 1, -0.7408, 0, 0.6717,
+ -0.098092, 0.551623, 0.040654, 0.625, 1, -0.7408, 0, 0.6717,
+ -0.098092, 0.489106, 0.040654, 0.625, 1, -0.7408, 0, 0.6717,
+ -0.070778, 0.465943, 0.070778, 0.625, 0, -0.6468, -0.7627, 0,
+ -0.098092, 0.489106, 0.040654, 0.625, 0, -0.6468, -0.7627, 0,
+ -0.098092, 0.489106, -0.040654, 0.625, 0.25, -0.6468, -0.7627, 0,
+ -0.128092, 0.489106, 0.040654, 0.625, 0, -1, 0, 0,
+ -0.128092, 0.551623, 0.040654, 0.625, 0, -1, 0, 0,
+ -0.128092, 0.551623, -0.040654, 0.625, 0.25, -1, 0, 0,
+ -0.098092, 0.551623, -0.040654, 0.625, 0.25, 0, 1, 0,
+ -0.128092, 0.551623, -0.040654, 0.625, 0.25, 0, 1, 0,
+ -0.128092, 0.551623, 0.040654, 0.625, 0, 0, 1, 0,
+ -0.098092, 0.489106, -0.040654, 0.625, 0.25, 0, 0, -1,
+ -0.128092, 0.489106, -0.040654, 0.625, 0.25, 0, 0, -1,
+ -0.128092, 0.551623, -0.040654, 0.625, 0.25, 0, 0, -1,
+ 0.098092, 0.489106, -0.040654, 0.625, 0.5, -0.9978, -0.0665, 0,
+ 0.103989, 0.400565, -0.024672, 0.625, 0.5, -0.9978, -0.0665, 0,
+ 0.103989, 0.400565, 0.024672, 0.625, 0.75, -0.9978, -0.0665, 0,
+ 0.128092, 0.489106, -0.040654, 0.625, 0.5, 1, 0, 0,
+ 0.128092, 0.551623, -0.040654, 0.625, 0.5, 1, 0, 0,
+ 0.128092, 0.551623, 0.040654, 0.625, 0.75, 1, 0, 0,
+ 0.128092, 0.489106, 0.040654, 0.625, 0.75, 0.9978, -0.0665, 0,
+ 0.122195, 0.400565, 0.024672, 0.625, 0.75, 0.9978, -0.0665, 0,
+ 0.122195, 0.400565, -0.024672, 0.625, 0.5, 0.9978, -0.0665, 0,
+ 0.098092, 0.489106, 0.040654, 0.625, 0.75, 0, 0, 1,
+ 0.128092, 0.489106, 0.040654, 0.625, 0.75, 0, 0, 1,
+ 0.128092, 0.551623, 0.040654, 0.625, 0.75, 0, 0, 1,
+ 0.098092, 0.551623, 0.040654, 0.625, 0.75, 0, 1, 0,
+ 0.128092, 0.551623, 0.040654, 0.625, 0.75, 0, 1, 0,
+ 0.128092, 0.551623, -0.040654, 0.625, 0.5, 0, 1, 0,
+ -0.122195, 0.400565, 0.024672, 0.625, 1, 0, 0.239, 0.971,
+ -0.128092, 0.335624, 0.040654, 0.625, 1, 0, 0.239, 0.971,
+ -0.098092, 0.335624, 0.040654, 0.625, 1, 0, 0.239, 0.971,
+ 0.122195, 0.400565, 0.024672, 0.625, 0.75, 0.9952, 0.0956, 0.0214,
+ 0.128092, 0.335624, 0.040654, 0.625, 0.75, 0.9952, 0.0956, 0.0214,
+ 0.128092, 0.353791, -0.040654, 0.625, 0.5, 0.9952, 0.0956, 0.0214,
+ 0.098092, 0.489106, -0.040654, 0.625, 0.5, 0, -0.1776, -0.9841,
+ 0.128092, 0.489106, -0.040654, 0.625, 0.5, 0, -0.1776, -0.9841,
+ 0.122195, 0.400565, -0.024672, 0.625, 0.5, 0, -0.1776, -0.9841,
+ -0.128092, 0.489106, -0.040654, 0.625, 0.25, -0.9978, -0.0665, 0,
+ -0.122195, 0.400565, -0.024672, 0.625, 0.25, -0.9978, -0.0665, 0,
+ -0.122195, 0.400565, 0.024672, 0.625, 0, -0.9978, -0.0665, 0,
+ -0.098092, 0.489106, -0.040654, 0.625, 0.25, 0, -0.1776, -0.9841,
+ -0.103989, 0.400565, -0.024672, 0.625, 0.25, 0, -0.1776, -0.9841,
+ -0.122195, 0.400565, -0.024672, 0.625, 0.25, 0, -0.1776, -0.9841,
+ -0.098092, 0.489106, 0.040654, 0.625, 1, 0, -0.1776, 0.9841,
+ -0.128092, 0.489106, 0.040654, 0.625, 1, 0, -0.1776, 0.9841,
+ -0.122195, 0.400565, 0.024672, 0.625, 1, 0, -0.1776, 0.9841,
+ 0.098092, 0.489106, 0.040654, 0.625, 0.75, 0, -0.1776, 0.9841,
+ 0.103989, 0.400565, 0.024672, 0.625, 0.75, 0, -0.1776, 0.9841,
+ 0.122195, 0.400565, 0.024672, 0.625, 0.75, 0, -0.1776, 0.9841,
+ -0.098092, 0.489106, 0.040654, 0.625, 0, 0.9978, -0.0665, 0,
+ -0.103989, 0.400565, 0.024672, 0.625, 0, 0.9978, -0.0665, 0,
+ -0.103989, 0.400565, -0.024672, 0.625, 0.25, 0.9978, -0.0665, 0,
+ 0.098092, 0.335624, 0.040654, 0.625, 0.75, 0, -0.6592, 0.752,
+ 0.098092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.6592, 0.752,
+ 0.128092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.6592, 0.752,
+ 0.098092, 0.353791, -0.040654, 0.625, 0.5, -1, 0, 0,
+ 0.098092, 0.234285, -0.079572, 0.625, 0.5, -1, 0, 0,
+ 0.098092, 0.234285, -0.048174, 0.625, 0.75, -1, 0, 0,
+ -0.103989, 0.400565, 0.024672, 0.625, 0, 0.9952, 0.0956, 0.0214,
+ -0.098092, 0.335624, 0.040654, 0.625, 0, 0.9952, 0.0956, 0.0214,
+ -0.098092, 0.353791, -0.040654, 0.625, 0.25, 0.9952, 0.0956, 0.0214,
+ 0.122195, 0.400565, -0.024672, 0.625, 0.5, 0, 0.3233, -0.9463,
+ 0.128092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3233, -0.9463,
+ 0.098092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3233, -0.9463,
+ -0.122195, 0.400565, -0.024672, 0.625, 0.25, 0, 0.3233, -0.9463,
+ -0.103989, 0.400565, -0.024672, 0.625, 0.25, 0, 0.3233, -0.9463,
+ -0.098092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3233, -0.9463,
+ -0.122195, 0.400565, 0.024672, 0.625, 0, -0.9921, 0.1251, 0,
+ -0.122195, 0.400565, -0.024672, 0.625, 0.25, -0.9921, 0.1251, 0,
+ -0.128092, 0.353791, -0.040654, 0.625, 0.25, -0.9921, 0.1251, 0,
+ 0.103989, 0.400565, 0.024672, 0.625, 0.75, -0.9921, 0.1251, 0,
+ 0.103989, 0.400565, -0.024672, 0.625, 0.5, -0.9921, 0.1251, 0,
+ 0.098092, 0.353791, -0.040654, 0.625, 0.5, -0.9921, 0.1251, 0,
+ 0.103989, 0.400565, 0.024672, 0.625, 0.75, 0, 0.239, 0.971,
+ 0.098092, 0.335624, 0.040654, 0.625, 0.75, 0, 0.239, 0.971,
+ 0.128092, 0.335624, 0.040654, 0.625, 0.75, 0, 0.239, 0.971,
+ -0.098092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.6843, -0.7292,
+ -0.098092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.6843, -0.7292,
+ -0.128092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.6843, -0.7292,
+ 0.128092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.6843, -0.7292,
+ 0.128092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.6843, -0.7292,
+ 0.098092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.6843, -0.7292,
+ 0.128092, 0.353791, -0.040654, 0.625, 0.5, 1, 0, 0,
+ 0.128092, 0.335624, 0.040654, 0.625, 0.75, 1, 0, 0,
+ 0.128092, 0.234285, -0.048174, 0.625, 0.75, 1, 0, 0,
+ -0.128092, 0.335624, 0.040654, 0.625, 1, 0, -0.6592, 0.752,
+ -0.128092, 0.234285, -0.048174, 0.625, 1, 0, -0.6592, 0.752,
+ -0.098092, 0.234285, -0.048174, 0.625, 1, 0, -0.6592, 0.752,
+ -0.098092, 0.353791, -0.040654, 0.625, 0.25, 1, 0, 0,
+ -0.098092, 0.335624, 0.040654, 0.625, 0, 1, 0, 0,
+ -0.098092, 0.234285, -0.048174, 0.625, 0, 1, 0, 0,
+ 0.128092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3097, -0.9508,
+ 0.128092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.3097, -0.9508,
+ 0.098092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.3097, -0.9508,
+ -0.098092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3097, -0.9508,
+ -0.098092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.3097, -0.9508,
+ -0.128092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.3097, -0.9508,
+ -0.128092, 0.353791, -0.040654, 0.625, 0.25, -1, 0, 0,
+ -0.128092, 0.234285, -0.079572, 0.625, 0.25, -1, 0, 0,
+ -0.128092, 0.234285, -0.048174, 0.625, 0, -1, 0, 0,
+ 0.098092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.1306, -0.9914,
+ 0.128092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.1306, -0.9914,
+ 0.120592, 0.186814, -0.107362, 0.625, 0.5, 0, 0.1306, -0.9914,
+ -0.098092, 0.192117, -0.077302, 0.625, 0, 0.9329, -0.3135, -0.1774,
+ -0.105592, 0.179081, -0.0937, 0.625, 0, 0.9329, -0.3135, -0.1774,
+ -0.105592, 0.186814, -0.107362, 0.625, 0.25, 0.9329, -0.3135, -0.1774,
+ -0.128092, 0.234285, -0.079572, 0.625, 0.25, -1, 0, 0,
+ -0.128092, 0.207583, -0.104626, 0.625, 0.25, -1, 0, 0,
+ -0.128092, 0.192117, -0.077302, 0.625, 0, -1, 0, 0,
+ 0.098092, 0.234285, -0.079572, 0.625, 0.5, -1, 0, 0,
+ 0.098092, 0.207583, -0.104626, 0.625, 0.5, -1, 0, 0,
+ 0.098092, 0.192117, -0.077302, 0.625, 0.75, -1, 0, 0,
+ 0.098092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.5684, 0.8228,
+ 0.098092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.5684, 0.8228,
+ 0.128092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.5684, 0.8228,
+ 0.128092, 0.234285, -0.079572, 0.625, 0.5, 1, 0, 0,
+ 0.128092, 0.234285, -0.048174, 0.625, 0.75, 1, 0, 0,
+ 0.128092, 0.192117, -0.077302, 0.625, 0.75, 1, 0, 0,
+ -0.128092, 0.234285, -0.048174, 0.625, 1, 0, -0.5684, 0.8228,
+ -0.128092, 0.192117, -0.077302, 0.625, 1, 0, -0.5684, 0.8228,
+ -0.098092, 0.192117, -0.077302, 0.625, 1, 0, -0.5684, 0.8228,
+ -0.098092, 0.234285, -0.079572, 0.625, 0.25, 1, 0, 0,
+ -0.098092, 0.234285, -0.048174, 0.625, 0, 1, 0, 0,
+ -0.098092, 0.192117, -0.077302, 0.625, 0, 1, 0, 0,
+ -0.105592, 0.179081, -0.0937, 0.625, 0, 0, -0.8703, -0.4926,
+ -0.120592, 0.179081, -0.0937, 0.625, 0, 0, -0.8703, -0.4926,
+ -0.120592, 0.186814, -0.107362, 0.625, 0.25, 0, -0.8703, -0.4926,
+ 0.105592, 0.186814, -0.107362, 0.625, 0.5, 0, -0.8703, -0.4926,
+ 0.120592, 0.186814, -0.107362, 0.625, 0.5, 0, -0.8703, -0.4926,
+ 0.120592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.8703, -0.4926,
+ -0.098092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.1306, -0.9914,
+ -0.105592, 0.186814, -0.107362, 0.625, 0.25, 0, 0.1306, -0.9914,
+ -0.120592, 0.186814, -0.107362, 0.625, 0.25, 0, 0.1306, -0.9914,
+ -0.128092, 0.192117, -0.077302, 0.625, 0, -0.9329, -0.3135, -0.1774,
+ -0.128092, 0.207583, -0.104626, 0.625, 0.25, -0.9329, -0.3135, -0.1774,
+ -0.120592, 0.186814, -0.107362, 0.625, 0.25, -0.9329, -0.3135, -0.1774,
+ 0.098092, 0.192117, -0.077302, 0.625, 0.75, -0.9329, -0.3135, -0.1774,
+ 0.098092, 0.207583, -0.104626, 0.625, 0.5, -0.9329, -0.3135, -0.1774,
+ 0.105592, 0.186814, -0.107362, 0.625, 0.5, -0.9329, -0.3135, -0.1774,
+ 0.098092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.7828, 0.6223,
+ 0.105592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.7828, 0.6223,
+ 0.120592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.7828, 0.6223,
+ 0.128092, 0.192117, -0.077302, 0.625, 0.75, 0.9329, -0.3135, -0.1774,
+ 0.120592, 0.179081, -0.0937, 0.625, 0.75, 0.9329, -0.3135, -0.1774,
+ 0.120592, 0.186814, -0.107362, 0.625, 0.5, 0.9329, -0.3135, -0.1774,
+ -0.098092, 0.192117, -0.077302, 0.625, 1, 0, -0.7828, 0.6223,
+ -0.128092, 0.192117, -0.077302, 0.625, 1, 0, -0.7828, 0.6223,
+ -0.120592, 0.179081, -0.0937, 0.625, 1, 0, -0.7828, 0.6223,
+ -0.052774, 0.643794, 0.052774, 0.625, 0, -0.9976, -0.0692, 0,
+ -0.058197, 0.722006, -0.058197, 0.625, 0.25, -0.9976, -0.0692, 0,
+ -0.052774, 0.643794, -0.052774, 0.625, 0.25, -0.9976, -0.0692, 0,
+ -0.052774, 0.643794, -0.052774, 0.625, 0.25, 0, -0.0692, -0.9976,
+ 0.058197, 0.722006, -0.058197, 0.625, 0.5, 0, -0.0692, -0.9976,
+ 0.052774, 0.643794, -0.052774, 0.625, 0.5, 0, -0.0692, -0.9976,
+ 0.052774, 0.643794, -0.052774, 0.625, 0.5, 0.9976, -0.0692, 0,
+ 0.058197, 0.722006, 0.058197, 0.625, 0.75, 0.9976, -0.0692, 0,
+ 0.052774, 0.643794, 0.052774, 0.625, 0.75, 0.9976, -0.0692, 0,
+ -0.052774, 0.643794, 0.052774, 0.625, 0, -0.9976, -0.0692, 0,
+ -0.058197, 0.722006, 0.058197, 0.625, 0, -0.9976, -0.0692, 0,
+ -0.058197, 0.722006, -0.058197, 0.625, 0.25, -0.9976, -0.0692, 0,
+ -0.052774, 0.643794, -0.052774, 0.625, 0.25, 0, -0.0692, -0.9976,
+ -0.058197, 0.722006, -0.058197, 0.625, 0.25, 0, -0.0692, -0.9976,
+ 0.058197, 0.722006, -0.058197, 0.625, 0.5, 0, -0.0692, -0.9976,
+ 0.052774, 0.643794, -0.052774, 0.625, 0.5, 0.9976, -0.0692, 0,
+ 0.058197, 0.722006, -0.058197, 0.625, 0.5, 0.9976, -0.0692, 0,
+ 0.058197, 0.722006, 0.058197, 0.625, 0.75, 0.9976, -0.0692, 0,
+ -0.03964, 0.319577, 0.03964, 0.625, 0, -0.9781, -0.2081, 0,
+ -0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.9781, -0.2081, 0,
+ -0.03964, 0.319577, -0.03964, 0.625, 0.25, -0.9781, -0.2081, 0,
+ 0.03964, 0.319577, 0.03964, 0.625, 0.75, 0, -0.2081, 0.9781,
+ -0.070778, 0.465943, 0.070778, 0.625, 1, 0, -0.2081, 0.9781,
+ -0.03964, 0.319577, 0.03964, 0.625, 1, 0, -0.2081, 0.9781,
+ -0.03964, 0.319577, -0.03964, 0.625, 0.25, 0, -0.2081, -0.9781,
+ 0.070778, 0.465943, -0.070778, 0.625, 0.5, 0, -0.2081, -0.9781,
+ 0.03964, 0.319577, -0.03964, 0.625, 0.5, 0, -0.2081, -0.9781,
+ 0.03964, 0.319577, -0.03964, 0.625, 0.5, 0.9781, -0.2081, 0,
+ 0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.9781, -0.2081, 0,
+ 0.03964, 0.319577, 0.03964, 0.625, 0.75, 0.9781, -0.2081, 0,
+ -0.03964, 0.319577, 0.03964, 0.625, 0, -0.9781, -0.2081, 0,
+ -0.070778, 0.465943, 0.070778, 0.625, 0, -0.9781, -0.2081, 0,
+ -0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.9781, -0.2081, 0,
+ 0.03964, 0.319577, 0.03964, 0.625, 0.75, 0, -0.2081, 0.9781,
+ 0.070778, 0.465943, 0.070778, 0.625, 0.75, 0, -0.2081, 0.9781,
+ -0.070778, 0.465943, 0.070778, 0.625, 1, 0, -0.2081, 0.9781,
+ -0.03964, 0.319577, -0.03964, 0.625, 0.25, 0, -0.2081, -0.9781,
+ -0.070778, 0.465943, -0.070778, 0.625, 0.25, 0, -0.2081, -0.9781,
+ 0.070778, 0.465943, -0.070778, 0.625, 0.5, 0, -0.2081, -0.9781,
+ 0.03964, 0.319577, -0.03964, 0.625, 0.5, 0.9781, -0.2081, 0,
+ 0.070778, 0.465943, -0.070778, 0.625, 0.5, 0.9781, -0.2081, 0,
+ 0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.9781, -0.2081, 0,
+];
+
+objArray.push(Robot_data);
+
+
+groupArray.push(
+ new VertGroup(
+ 0, // material number
+ 0, // object number
+ 0, // starting face
+ 522, // length
+ )
+);
+
+groupArray.push(
+ new VertGroup(
+ 1, // material number
+ 0, // object number
+ 522, // starting face
+ 18, // length
+ )
+);
+
+groupArray.push(
+ new VertGroup(
+ 2, // material number
+ 0, // object number
+ 540, // starting face
+ 24, // length
+ )
+);
diff --git a/aswebglue/examples/Material/index.html b/aswebglue/examples/Material/index.html
new file mode 100644
index 0000000..f85d6d5
--- /dev/null
+++ b/aswebglue/examples/Material/index.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+ Wavefront Object converted to AssemblyScript
+
+
+
+ fps:
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/Material/obj_mat.ts b/aswebglue/examples/Material/obj_mat.ts
new file mode 100644
index 0000000..5b6c466
--- /dev/null
+++ b/aswebglue/examples/Material/obj_mat.ts
@@ -0,0 +1,129 @@
+/**
+ * @author Rick Battagline / https://embed.com/wasm
+ */
+
+import {WebGLRenderingContext, WebGLShader, WebGLProgram, WebGLBuffer, GLint, WebGLUniformLocation} from '../../WebGL';
+
+import {objArray, matArray, groupArray, VertGroup} from './Robot';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision mediump float;
+
+ in vec3 position;
+ in vec3 normal;
+ uniform vec3 diffuse;
+ out vec4 c;
+
+ void main() {
+ const vec3 light = vec3(0.25, 2.0, -0.5);
+ float d = clamp( dot( normal, light ), 0.0, 1.0);
+ vec4 pos = vec4( position, 1.0 );
+
+ mat4 mRotateTranslate = mat4(
+ 1.0, 0.0, 0.0, 0.0, // column 1
+ 0.0, cos(-0.2),-sin(-0.2), -0.2, // column 2
+ 0.0, sin(-0.0), cos(-0.2), 0.0, // column 3
+ 0.0, 0.0, 0.0, 1.0 // column 4
+ );
+
+ gl_Position = pos * mRotateTranslate;
+ c = vec4( d + diffuse.r,
+ d + diffuse.g,
+ d + diffuse.b, 1.0);
+ }
+`;
+
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+// initialize webgl
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let normal_al: GLint = gl.getAttribLocation(program, 'normal');
+gl.enableVertexAttribArray(normal_al);
+
+let diffuse: WebGLUniformLocation = gl.getUniformLocation(program, 'diffuse');
+
+//diffuse
+gl.enable(gl.DEPTH_TEST);
+
+function rotate(theta: f32): void {
+ for (var obj_i: i32 = 0; obj_i < objArray.length; obj_i++) {
+ for (var coord_i: i32 = 0; coord_i < objArray[obj_i].length; coord_i += 8) {
+ let x: f32 = objArray[obj_i][coord_i];
+ let z: f32 = objArray[obj_i][coord_i + 2];
+
+ let nx: f32 = objArray[obj_i][coord_i + 5];
+ let nz: f32 = objArray[obj_i][coord_i + 7];
+
+ let x1: f32 = x * Mathf.cos(theta) - z * Mathf.sin(theta);
+ let z1: f32 = z * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ let nx1: f32 = nx * Mathf.cos(theta) - nz * Mathf.sin(theta);
+ let nz1: f32 = nz * Mathf.cos(theta) + nx * Mathf.sin(theta);
+
+ objArray[obj_i][coord_i] = x1;
+ objArray[obj_i][coord_i + 2] = z1;
+
+ objArray[obj_i][coord_i + 5] = nx1;
+ objArray[obj_i][coord_i + 7] = nz1;
+ }
+ }
+
+ return;
+}
+
+var vGroup: VertGroup;
+export function displayLoop(delta: i32): void {
+ let r: f32 = delta / 10000.0;
+ rotate(r);
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+ for (var g_i: i32 = 0; g_i < groupArray.length; g_i++) {
+ vGroup = groupArray[g_i];
+ gl.bufferData(gl.ARRAY_BUFFER, objArray[vGroup.obj_index], gl.DYNAMIC_DRAW);
+ let diffuse_r: f32 = matArray[vGroup.mat_index][4];
+ let diffuse_g: f32 = matArray[vGroup.mat_index][5];
+ let diffuse_b: f32 = matArray[vGroup.mat_index][6];
+ gl.uniform3f(diffuse, diffuse_r, diffuse_g, diffuse_b);
+
+ // dimensions | data_type | normalize | stride | offset
+ gl.vertexAttribPointer(position_al, 3, gl.FLOAT, +false, 32, 0);
+ // vertexAttribPointer(gl, tex_uv_al, 2, FLOAT, false, 32, 12);
+ gl.vertexAttribPointer(normal_al, 3, gl.FLOAT, +false, 32, 20);
+ gl.drawArrays(gl.TRIANGLES, vGroup.start_face, vGroup.length);
+ }
+}
diff --git a/aswebglue/examples/Material/robot_temp.asc b/aswebglue/examples/Material/robot_temp.asc
new file mode 100644
index 0000000..45213c3
--- /dev/null
+++ b/aswebglue/examples/Material/robot_temp.asc
@@ -0,0 +1,656 @@
+
+export class VertGroup {
+ mat_index: i32;
+ obj_index: i32;
+ start_face: i32;
+ length: i32;
+
+ constructor(material_index: i32, object_index: i32, starting_face: i32, len: i32 ) {
+ this.mat_index = material_index;
+ this.obj_index = object_index;
+ this.start_face = starting_face;
+ this.length = len;
+ }
+}
+
+export var objArray = new Array>(); //1
+export var matArray = new Array>(); //3
+export var groupArray = new Array>(); //0
+
+export var TanMaterial_mat:StaticArray = [
+ 323.999994, // specularExponent
+ 1.000000, 1.000000, 1.000000, // ambientReflectivity
+ 0.800000, 0.314507, 0.070683, // diffuseReflectivity
+ 0.500000, 0.500000, 0.500000, // specularReflectivity
+ 0.000000, 0.000000, 0.000000, // emission
+ 1.450000, // opticalDensity
+ 1.000000, // dissolveFactor
+ 2, // illuminationModel
+ ];
+
+matArray.push(TanMaterial_mat);
+
+export var RedMaterial_mat:StaticArray = [
+ 225.000000, // specularExponent
+ 1.000000, 1.000000, 1.000000, // ambientReflectivity
+ 1.000000, 0.000000, 0.000000, // diffuseReflectivity
+ 0.500000, 0.500000, 0.500000, // specularReflectivity
+ 0.000000, 0.000000, 0.000000, // emission
+ 1.450000, // opticalDensity
+ 1.000000, // dissolveFactor
+ 2, // illuminationModel
+ ];
+
+matArray.push(RedMaterial_mat);
+
+export var BlueMaterial_mat:StaticArray = [
+ 225.000000, // specularExponent
+ 1.000000, 1.000000, 1.000000, // ambientReflectivity
+ 0.000000, 0.000000, 1.000000, // diffuseReflectivity
+ 0.500000, 0.500000, 0.500000, // specularReflectivity
+ 0.000000, 0.000000, 0.000000, // emission
+ 1.450000, // opticalDensity
+ 1.000000, // dissolveFactor
+ 2, // illuminationModel
+ ];
+
+matArray.push(BlueMaterial_mat);
+
+
+export var Robot_data: StaticArray = [
+//X, Y, Z, U, V, NX, NY, NZ
+-0.1, 0.1, -0.1, 0.625, 0.25, 0, 0.2651, -0.9642,
+0.03964, 0.319577, -0.03964, 0.625, 0.5, 0, 0.2651, -0.9642,
+0.1, 0.1, -0.1, 0.625, 0.5, 0, 0.2651, -0.9642,
+0.1, 0.1, 0.1, 0.625, 0.75, 0, 0, 1,
+-0.1, -0.1, 0.1, 0.375, 1, 0, 0, 1,
+0.1, -0.1, 0.1, 0.375, 0.75, 0, 0, 1,
+-0.1, 0.1, 0.1, 0.625, 0, -1, 0, 0,
+-0.1, -0.1, -0.1, 0.375, 0.25, -1, 0, 0,
+-0.1, -0.1, 0.1, 0.375, 0, -1, 0, 0,
+0.1, -0.1, -0.1, 0.375, 0.5, 0, -1, 0,
+-0.1, -0.1, 0.1, 0.125, 0.75, 0, -1, 0,
+-0.1, -0.1, -0.1, 0.125, 0.5, 0, -1, 0,
+0.1, 0.1, -0.1, 0.625, 0.5, 1, 0, 0,
+0.1, -0.1, 0.1, 0.375, 0.75, 1, 0, 0,
+0.1, -0.1, -0.1, 0.375, 0.5, 1, 0, 0,
+-0.1, 0.1, -0.1, 0.625, 0.25, 0, 0, -1,
+0.1, -0.1, -0.1, 0.375, 0.5, 0, 0, -1,
+-0.1, -0.1, -0.1, 0.375, 0.25, 0, 0, -1,
+0.1, 0.1, 0.1, 0.625, 0.75, 0, 0.2651, 0.9642,
+-0.03964, 0.319577, 0.03964, 0.625, 1, 0, 0.2651, 0.9642,
+-0.1, 0.1, 0.1, 0.625, 1, 0, 0.2651, 0.9642,
+-0.1, 0.1, 0.1, 0.625, 0, -0.9642, 0.2651, 0,
+-0.03964, 0.319577, -0.03964, 0.625, 0.25, -0.9642, 0.2651, 0,
+-0.1, 0.1, -0.1, 0.625, 0.25, -0.9642, 0.2651, 0,
+0.1, 0.1, -0.1, 0.625, 0.5, 0.9642, 0.2651, 0,
+0.03964, 0.319577, 0.03964, 0.625, 0.75, 0.9642, 0.2651, 0,
+0.1, 0.1, 0.1, 0.625, 0.75, 0.9642, 0.2651, 0,
+-0.070778, 0.465943, -0.070778, 0.625, 0.25, 0, 0, -1,
+0.070778, 0.574785, -0.070778, 0.625, 0.5, 0, 0, -1,
+0.070778, 0.465943, -0.070778, 0.625, 0.5, 0, 0, -1,
+-0.070778, 0.574785, 0.070778, 0.625, 0, -0.6461, 0.7632, 0,
+-0.036361, 0.603924, -0.036361, 0.625, 0.25, -0.6461, 0.7632, 0,
+-0.070778, 0.574785, -0.070778, 0.625, 0.25, -0.6461, 0.7632, 0,
+0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.7408, 0, 0.6717,
+0.098092, 0.551623, 0.040654, 0.625, 0.75, 0.7408, 0, 0.6717,
+0.070778, 0.574785, 0.070778, 0.625, 0.75, 0.7408, 0, 0.6717,
+-0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.7408, 0, -0.6717,
+-0.098092, 0.551623, -0.040654, 0.625, 0.25, -0.7408, 0, -0.6717,
+-0.070778, 0.574785, -0.070778, 0.625, 0.25, -0.7408, 0, -0.6717,
+0.070778, 0.465943, 0.070778, 0.625, 0.75, 0, 0, 1,
+-0.070778, 0.574785, 0.070778, 0.625, 1, 0, 0, 1,
+-0.070778, 0.465943, 0.070778, 0.625, 1, 0, 0, 1,
+0.036361, 0.603924, 0.036361, 0.625, 0.75, 0, 0, 1,
+-0.036361, 0.622896, 0.036361, 0.625, 1, 0, 0, 1,
+-0.036361, 0.603924, 0.036361, 0.625, 1, 0, 0, 1,
+0.070778, 0.574785, 0.070778, 0.625, 0.75, 0, 0.7632, 0.6461,
+-0.036361, 0.603924, 0.036361, 0.625, 1, 0, 0.7632, 0.6461,
+-0.070778, 0.574785, 0.070778, 0.625, 1, 0, 0.7632, 0.6461,
+-0.070778, 0.574785, -0.070778, 0.625, 0.25, 0, 0.7632, -0.6461,
+0.036361, 0.603924, -0.036361, 0.625, 0.5, 0, 0.7632, -0.6461,
+0.070778, 0.574785, -0.070778, 0.625, 0.5, 0, 0.7632, -0.6461,
+0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.6461, 0.7632, 0,
+0.036361, 0.603924, 0.036361, 0.625, 0.75, 0.6461, 0.7632, 0,
+0.070778, 0.574785, 0.070778, 0.625, 0.75, 0.6461, 0.7632, 0,
+-0.036361, 0.622896, -0.036361, 0.625, 0.25, 0, -0.6177, -0.7864,
+0.052774, 0.643794, -0.052774, 0.625, 0.5, 0, -0.6177, -0.7864,
+0.036361, 0.622896, -0.036361, 0.625, 0.5, 0, -0.6177, -0.7864,
+-0.036361, 0.603924, -0.036361, 0.625, 0.25, 0, 0, -1,
+0.036361, 0.622896, -0.036361, 0.625, 0.5, 0, 0, -1,
+0.036361, 0.603924, -0.036361, 0.625, 0.5, 0, 0, -1,
+0.036361, 0.603924, -0.036361, 0.625, 0.5, 1, 0, 0,
+0.036361, 0.622896, 0.036361, 0.625, 0.75, 1, 0, 0,
+0.036361, 0.603924, 0.036361, 0.625, 0.75, 1, 0, 0,
+-0.036361, 0.603924, 0.036361, 0.625, 0, -1, 0, 0,
+-0.036361, 0.622896, -0.036361, 0.625, 0.25, -1, 0, 0,
+-0.036361, 0.603924, -0.036361, 0.625, 0.25, -1, 0, 0,
+0.036361, 0.622896, -0.036361, 0.625, 0.5, 0.7864, -0.6177, 0,
+0.052774, 0.643794, 0.052774, 0.625, 0.75, 0.7864, -0.6177, 0,
+0.036361, 0.622896, 0.036361, 0.625, 0.75, 0.7864, -0.6177, 0,
+-0.036361, 0.622896, 0.036361, 0.625, 0, -0.7864, -0.6177, 0,
+-0.052774, 0.643794, -0.052774, 0.625, 0.25, -0.7864, -0.6177, 0,
+-0.036361, 0.622896, -0.036361, 0.625, 0.25, -0.7864, -0.6177, 0,
+0.036361, 0.622896, 0.036361, 0.625, 0.75, 0, -0.6177, 0.7864,
+-0.052774, 0.643794, 0.052774, 0.625, 1, 0, -0.6177, 0.7864,
+-0.036361, 0.622896, 0.036361, 0.625, 1, 0, -0.6177, 0.7864,
+-0.058197, 0.722006, -0.058197, 0.625, 0.25, 0, 0.5681, -0.8229,
+0.028575, 0.764915, -0.028575, 0.625, 0.5, 0, 0.5681, -0.8229,
+0.058197, 0.722006, -0.058197, 0.625, 0.5, 0, 0.5681, -0.8229,
+0.052774, 0.643794, 0.052774, 0.625, 0.75, 0, -0.0692, 0.9976,
+-0.058197, 0.722006, 0.058197, 0.625, 1, 0, -0.0692, 0.9976,
+-0.052774, 0.643794, 0.052774, 0.625, 1, 0, -0.0692, 0.9976,
+-0.028575, 0.764915, -0.028575, 0.875, 0.5, 0, 1, 0,
+0.028575, 0.764915, 0.028575, 0.625, 0.75, 0, 1, 0,
+0.028575, 0.764915, -0.028575, 0.625, 0.5, 0, 1, 0,
+0.058197, 0.722006, -0.058197, 0.625, 0.5, 0.8229, 0.5681, 0,
+0.028575, 0.764915, 0.028575, 0.625, 0.75, 0.8229, 0.5681, 0,
+0.058197, 0.722006, 0.058197, 0.625, 0.75, 0.8229, 0.5681, 0,
+-0.058197, 0.722006, 0.058197, 0.625, 0, -0.8229, 0.5681, 0,
+-0.028575, 0.764915, -0.028575, 0.625, 0.25, -0.8229, 0.5681, 0,
+-0.058197, 0.722006, -0.058197, 0.625, 0.25, -0.8229, 0.5681, 0,
+0.058197, 0.722006, 0.058197, 0.625, 0.75, 0, 0.5681, 0.8229,
+-0.028575, 0.764915, 0.028575, 0.625, 1, 0, 0.5681, 0.8229,
+-0.058197, 0.722006, 0.058197, 0.625, 1, 0, 0.5681, 0.8229,
+0.098092, 0.551623, -0.040654, 0.625, 0.5, 0, 0, -1,
+0.128092, 0.489106, -0.040654, 0.625, 0.5, 0, 0, -1,
+0.098092, 0.489106, -0.040654, 0.625, 0.5, 0, 0, -1,
+0.070778, 0.465943, -0.070778, 0.625, 0.5, 0.6468, -0.7627, 0,
+0.098092, 0.489106, 0.040654, 0.625, 0.75, 0.6468, -0.7627, 0,
+0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.6468, -0.7627, 0,
+0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.7408, 0, -0.6717,
+0.098092, 0.489106, -0.040654, 0.625, 0.5, 0.7408, 0, -0.6717,
+0.070778, 0.465943, -0.070778, 0.625, 0.5, 0.7408, 0, -0.6717,
+0.070778, 0.574785, 0.070778, 0.625, 0.75, 0.6468, 0.7627, 0,
+0.098092, 0.551623, -0.040654, 0.625, 0.5, 0.6468, 0.7627, 0,
+0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.6468, 0.7627, 0,
+-0.098092, 0.551623, 0.040654, 0.625, 1, 0, 0, 1,
+-0.128092, 0.489106, 0.040654, 0.625, 1, 0, 0, 1,
+-0.098092, 0.489106, 0.040654, 0.625, 1, 0, 0, 1,
+-0.070778, 0.574785, -0.070778, 0.625, 0.25, -0.6468, 0.7627, 0,
+-0.098092, 0.551623, 0.040654, 0.625, 0, -0.6468, 0.7627, 0,
+-0.070778, 0.574785, 0.070778, 0.625, 0, -0.6468, 0.7627, 0,
+-0.070778, 0.574785, 0.070778, 0.625, 1, -0.7408, 0, 0.6717,
+-0.098092, 0.489106, 0.040654, 0.625, 1, -0.7408, 0, 0.6717,
+-0.070778, 0.465943, 0.070778, 0.625, 1, -0.7408, 0, 0.6717,
+-0.070778, 0.465943, 0.070778, 0.625, 0, -0.6468, -0.7627, 0,
+-0.098092, 0.489106, -0.040654, 0.625, 0.25, -0.6468, -0.7627, 0,
+-0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.6468, -0.7627, 0,
+-0.128092, 0.489106, 0.040654, 0.625, 0, -1, 0, 0,
+-0.128092, 0.551623, -0.040654, 0.625, 0.25, -1, 0, 0,
+-0.128092, 0.489106, -0.040654, 0.625, 0.25, -1, 0, 0,
+-0.098092, 0.551623, -0.040654, 0.625, 0.25, 0, 1, 0,
+-0.128092, 0.551623, 0.040654, 0.625, 0, 0, 1, 0,
+-0.098092, 0.551623, 0.040654, 0.625, 0, 0, 1, 0,
+-0.098092, 0.489106, -0.040654, 0.625, 0.25, 0, 0, -1,
+-0.128092, 0.551623, -0.040654, 0.625, 0.25, 0, 0, -1,
+-0.098092, 0.551623, -0.040654, 0.625, 0.25, 0, 0, -1,
+0.098092, 0.489106, -0.040654, 0.625, 0.5, -0.9978, -0.0665, 0,
+0.103989, 0.400565, 0.024672, 0.625, 0.75, -0.9978, -0.0665, 0,
+0.098092, 0.489106, 0.040654, 0.625, 0.75, -0.9978, -0.0665, 0,
+0.128092, 0.489106, -0.040654, 0.625, 0.5, 1, 0, 0,
+0.128092, 0.551623, 0.040654, 0.625, 0.75, 1, 0, 0,
+0.128092, 0.489106, 0.040654, 0.625, 0.75, 1, 0, 0,
+0.128092, 0.489106, 0.040654, 0.625, 0.75, 0.9978, -0.0665, 0,
+0.122195, 0.400565, -0.024672, 0.625, 0.5, 0.9978, -0.0665, 0,
+0.128092, 0.489106, -0.040654, 0.625, 0.5, 0.9978, -0.0665, 0,
+0.098092, 0.489106, 0.040654, 0.625, 0.75, 0, 0, 1,
+0.128092, 0.551623, 0.040654, 0.625, 0.75, 0, 0, 1,
+0.098092, 0.551623, 0.040654, 0.625, 0.75, 0, 0, 1,
+0.098092, 0.551623, 0.040654, 0.625, 0.75, 0, 1, 0,
+0.128092, 0.551623, -0.040654, 0.625, 0.5, 0, 1, 0,
+0.098092, 0.551623, -0.040654, 0.625, 0.5, 0, 1, 0,
+-0.122195, 0.400565, 0.024672, 0.625, 1, 0, 0.239, 0.971,
+-0.098092, 0.335624, 0.040654, 0.625, 1, 0, 0.239, 0.971,
+-0.103989, 0.400565, 0.024672, 0.625, 1, 0, 0.239, 0.971,
+0.122195, 0.400565, 0.024672, 0.625, 0.75, 0.9921, 0.1251, 0,
+0.128092, 0.353791, -0.040654, 0.625, 0.5, 0.9921, 0.1251, 0,
+0.122195, 0.400565, -0.024672, 0.625, 0.5, 0.9921, 0.1251, 0,
+0.098092, 0.489106, -0.040654, 0.625, 0.5, 0, -0.1776, -0.9841,
+0.122195, 0.400565, -0.024672, 0.625, 0.5, 0, -0.1776, -0.9841,
+0.103989, 0.400565, -0.024672, 0.625, 0.5, 0, -0.1776, -0.9841,
+-0.128092, 0.489106, -0.040654, 0.625, 0.25, -0.9978, -0.0665, 0,
+-0.122195, 0.400565, 0.024672, 0.625, 0, -0.9978, -0.0665, 0,
+-0.128092, 0.489106, 0.040654, 0.625, 0, -0.9978, -0.0665, 0,
+-0.098092, 0.489106, -0.040654, 0.625, 0.25, 0, -0.1776, -0.9841,
+-0.122195, 0.400565, -0.024672, 0.625, 0.25, 0, -0.1776, -0.9841,
+-0.128092, 0.489106, -0.040654, 0.625, 0.25, 0, -0.1776, -0.9841,
+-0.098092, 0.489106, 0.040654, 0.625, 1, 0, -0.1776, 0.9841,
+-0.122195, 0.400565, 0.024672, 0.625, 1, 0, -0.1776, 0.9841,
+-0.103989, 0.400565, 0.024672, 0.625, 1, 0, -0.1776, 0.9841,
+0.098092, 0.489106, 0.040654, 0.625, 0.75, 0, -0.1776, 0.9841,
+0.122195, 0.400565, 0.024672, 0.625, 0.75, 0, -0.1776, 0.9841,
+0.128092, 0.489106, 0.040654, 0.625, 0.75, 0, -0.1776, 0.9841,
+-0.098092, 0.489106, 0.040654, 0.625, 0, 0.9978, -0.0665, 0,
+-0.103989, 0.400565, -0.024672, 0.625, 0.25, 0.9978, -0.0665, 0,
+-0.098092, 0.489106, -0.040654, 0.625, 0.25, 0.9978, -0.0665, 0,
+0.098092, 0.335624, 0.040654, 0.625, 0.75, 0, -0.6592, 0.752,
+0.128092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.6592, 0.752,
+0.128092, 0.335624, 0.040654, 0.625, 0.75, 0, -0.6592, 0.752,
+0.098092, 0.353791, -0.040654, 0.625, 0.5, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.625, 0.75, -1, 0, 0,
+0.098092, 0.335624, 0.040654, 0.625, 0.75, -1, 0, 0,
+-0.103989, 0.400565, 0.024672, 0.625, 0, 0.9921, 0.1251, 0,
+-0.098092, 0.353791, -0.040654, 0.625, 0.25, 0.9921, 0.1251, 0,
+-0.103989, 0.400565, -0.024672, 0.625, 0.25, 0.9921, 0.1251, 0,
+0.122195, 0.400565, -0.024672, 0.625, 0.5, 0, 0.3233, -0.9463,
+0.098092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3233, -0.9463,
+0.103989, 0.400565, -0.024672, 0.625, 0.5, 0, 0.3233, -0.9463,
+-0.122195, 0.400565, -0.024672, 0.625, 0.25, 0, 0.3233, -0.9463,
+-0.098092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3233, -0.9463,
+-0.128092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3233, -0.9463,
+-0.122195, 0.400565, 0.024672, 0.625, 0, -0.9952, 0.0956, 0.0214,
+-0.128092, 0.353791, -0.040654, 0.625, 0.25, -0.9952, 0.0956, 0.0214,
+-0.128092, 0.335624, 0.040654, 0.625, 0, -0.9952, 0.0956, 0.0214,
+0.103989, 0.400565, 0.024672, 0.625, 0.75, -0.9952, 0.0956, 0.0214,
+0.098092, 0.353791, -0.040654, 0.625, 0.5, -0.9952, 0.0956, 0.0214,
+0.098092, 0.335624, 0.040654, 0.625, 0.75, -0.9952, 0.0956, 0.0214,
+0.103989, 0.400565, 0.024672, 0.625, 0.75, 0, 0.239, 0.971,
+0.128092, 0.335624, 0.040654, 0.625, 0.75, 0, 0.239, 0.971,
+0.122195, 0.400565, 0.024672, 0.625, 0.75, 0, 0.239, 0.971,
+-0.098092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.6843, -0.7292,
+-0.128092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.6843, -0.7292,
+-0.128092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.6843, -0.7292,
+0.128092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.6843, -0.7292,
+0.098092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.6843, -0.7292,
+0.098092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.6843, -0.7292,
+0.128092, 0.353791, -0.040654, 0.625, 0.5, 1, 0, 0,
+0.128092, 0.234285, -0.048174, 0.625, 0.75, 1, 0, 0,
+0.128092, 0.234285, -0.079572, 0.625, 0.5, 1, 0, 0,
+-0.128092, 0.335624, 0.040654, 0.625, 1, 0, -0.6592, 0.752,
+-0.098092, 0.234285, -0.048174, 0.625, 1, 0, -0.6592, 0.752,
+-0.098092, 0.335624, 0.040654, 0.625, 1, 0, -0.6592, 0.752,
+-0.098092, 0.353791, -0.040654, 0.625, 0.25, 1, 0, 0,
+-0.098092, 0.234285, -0.048174, 0.625, 0, 1, 0, 0,
+-0.098092, 0.234285, -0.079572, 0.625, 0.25, 1, 0, 0,
+0.128092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3097, -0.9509,
+0.098092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.3097, -0.9509,
+0.098092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3097, -0.9509,
+-0.098092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3097, -0.9508,
+-0.128092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.3097, -0.9508,
+-0.128092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3097, -0.9508,
+-0.128092, 0.353791, -0.040654, 0.625, 0.25, -1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.625, 0, -1, 0, 0,
+-0.128092, 0.335624, 0.040654, 0.625, 0, -1, 0, 0,
+0.098092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.1306, -0.9914,
+0.120592, 0.186814, -0.107362, 0.625, 0.5, 0, 0.1306, -0.9914,
+0.105592, 0.186814, -0.107362, 0.625, 0.5, 0, 0.1306, -0.9914,
+-0.098092, 0.192117, -0.077302, 0.625, 0, 0.9329, -0.3135, -0.1774,
+-0.105592, 0.186814, -0.107362, 0.625, 0.25, 0.9329, -0.3135, -0.1774,
+-0.098092, 0.207583, -0.104626, 0.625, 0.25, 0.9329, -0.3135, -0.1774,
+-0.128092, 0.234285, -0.079572, 0.625, 0.25, -1, 0, 0,
+-0.128092, 0.192117, -0.077302, 0.625, 0, -1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.625, 0, -1, 0, 0,
+0.098092, 0.234285, -0.079572, 0.625, 0.5, -1, 0, 0,
+0.098092, 0.192117, -0.077302, 0.625, 0.75, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.625, 0.75, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.5684, 0.8228,
+0.128092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.5684, 0.8228,
+0.128092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.5684, 0.8228,
+0.128092, 0.234285, -0.079572, 0.625, 0.5, 1, 0, 0,
+0.128092, 0.192117, -0.077302, 0.625, 0.75, 1, 0, 0,
+0.128092, 0.207583, -0.104626, 0.625, 0.5, 1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.625, 1, 0, -0.5684, 0.8228,
+-0.098092, 0.192117, -0.077302, 0.625, 1, 0, -0.5684, 0.8228,
+-0.098092, 0.234285, -0.048174, 0.625, 1, 0, -0.5684, 0.8228,
+-0.098092, 0.234285, -0.079572, 0.625, 0.25, 1, 0, 0,
+-0.098092, 0.192117, -0.077302, 0.625, 0, 1, 0, 0,
+-0.098092, 0.207583, -0.104626, 0.625, 0.25, 1, 0, 0,
+-0.105592, 0.179081, -0.0937, 0.625, 0, 0, -0.8703, -0.4926,
+-0.120592, 0.186814, -0.107362, 0.625, 0.25, 0, -0.8703, -0.4926,
+-0.105592, 0.186814, -0.107362, 0.625, 0.25, 0, -0.8703, -0.4926,
+0.105592, 0.186814, -0.107362, 0.625, 0.5, 0, -0.8703, -0.4926,
+0.120592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.8703, -0.4926,
+0.105592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.8703, -0.4926,
+-0.098092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.1306, -0.9914,
+-0.120592, 0.186814, -0.107362, 0.625, 0.25, 0, 0.1306, -0.9914,
+-0.128092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.1306, -0.9914,
+-0.128092, 0.192117, -0.077302, 0.625, 0, -0.9329, -0.3135, -0.1774,
+-0.120592, 0.186814, -0.107362, 0.625, 0.25, -0.9329, -0.3135, -0.1774,
+-0.120592, 0.179081, -0.0937, 0.625, 0, -0.9329, -0.3135, -0.1774,
+0.098092, 0.192117, -0.077302, 0.625, 0.75, -0.9329, -0.3135, -0.1774,
+0.105592, 0.186814, -0.107362, 0.625, 0.5, -0.9329, -0.3135, -0.1774,
+0.105592, 0.179081, -0.0937, 0.625, 0.75, -0.9329, -0.3135, -0.1774,
+0.098092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.7828, 0.6223,
+0.120592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.7828, 0.6223,
+0.128092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.7828, 0.6223,
+0.128092, 0.192117, -0.077302, 0.625, 0.75, 0.9329, -0.3135, -0.1774,
+0.120592, 0.186814, -0.107362, 0.625, 0.5, 0.9329, -0.3135, -0.1774,
+0.128092, 0.207583, -0.104626, 0.625, 0.5, 0.9329, -0.3135, -0.1774,
+-0.098092, 0.192117, -0.077302, 0.625, 1, 0, -0.7828, 0.6223,
+-0.120592, 0.179081, -0.0937, 0.625, 1, 0, -0.7828, 0.6223,
+-0.105592, 0.179081, -0.0937, 0.625, 1, 0, -0.7828, 0.6223,
+-0.1, 0.1, -0.1, 0.625, 0.25, 0, 0.2651, -0.9642,
+-0.03964, 0.319577, -0.03964, 0.625, 0.25, 0, 0.2651, -0.9642,
+0.03964, 0.319577, -0.03964, 0.625, 0.5, 0, 0.2651, -0.9642,
+0.1, 0.1, 0.1, 0.625, 0.75, 0, 0, 1,
+-0.1, 0.1, 0.1, 0.625, 1, 0, 0, 1,
+-0.1, -0.1, 0.1, 0.375, 1, 0, 0, 1,
+-0.1, 0.1, 0.1, 0.625, 0, -1, 0, 0,
+-0.1, 0.1, -0.1, 0.625, 0.25, -1, 0, 0,
+-0.1, -0.1, -0.1, 0.375, 0.25, -1, 0, 0,
+0.1, -0.1, -0.1, 0.375, 0.5, 0, -1, 0,
+0.1, -0.1, 0.1, 0.375, 0.75, 0, -1, 0,
+-0.1, -0.1, 0.1, 0.125, 0.75, 0, -1, 0,
+0.1, 0.1, -0.1, 0.625, 0.5, 1, 0, 0,
+0.1, 0.1, 0.1, 0.625, 0.75, 1, 0, 0,
+0.1, -0.1, 0.1, 0.375, 0.75, 1, 0, 0,
+-0.1, 0.1, -0.1, 0.625, 0.25, 0, 0, -1,
+0.1, 0.1, -0.1, 0.625, 0.5, 0, 0, -1,
+0.1, -0.1, -0.1, 0.375, 0.5, 0, 0, -1,
+0.1, 0.1, 0.1, 0.625, 0.75, 0, 0.2651, 0.9642,
+0.03964, 0.319577, 0.03964, 0.625, 0.75, 0, 0.2651, 0.9642,
+-0.03964, 0.319577, 0.03964, 0.625, 1, 0, 0.2651, 0.9642,
+-0.1, 0.1, 0.1, 0.625, 0, -0.9642, 0.2651, 0,
+-0.03964, 0.319577, 0.03964, 0.625, 0, -0.9642, 0.2651, 0,
+-0.03964, 0.319577, -0.03964, 0.625, 0.25, -0.9642, 0.2651, 0,
+0.1, 0.1, -0.1, 0.625, 0.5, 0.9642, 0.2651, 0,
+0.03964, 0.319577, -0.03964, 0.625, 0.5, 0.9642, 0.2651, 0,
+0.03964, 0.319577, 0.03964, 0.625, 0.75, 0.9642, 0.2651, 0,
+-0.070778, 0.465943, -0.070778, 0.625, 0.25, 0, 0, -1,
+-0.070778, 0.574785, -0.070778, 0.625, 0.25, 0, 0, -1,
+0.070778, 0.574785, -0.070778, 0.625, 0.5, 0, 0, -1,
+-0.070778, 0.574785, 0.070778, 0.625, 0, -0.6461, 0.7632, 0,
+-0.036361, 0.603924, 0.036361, 0.625, 0, -0.6461, 0.7632, 0,
+-0.036361, 0.603924, -0.036361, 0.625, 0.25, -0.6461, 0.7632, 0,
+0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.7408, 0, 0.6717,
+0.098092, 0.489106, 0.040654, 0.625, 0.75, 0.7408, 0, 0.6717,
+0.098092, 0.551623, 0.040654, 0.625, 0.75, 0.7408, 0, 0.6717,
+-0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.7408, 0, -0.6717,
+-0.098092, 0.489106, -0.040654, 0.625, 0.25, -0.7408, 0, -0.6717,
+-0.098092, 0.551623, -0.040654, 0.625, 0.25, -0.7408, 0, -0.6717,
+0.070778, 0.465943, 0.070778, 0.625, 0.75, 0, 0, 1,
+0.070778, 0.574785, 0.070778, 0.625, 0.75, 0, 0, 1,
+-0.070778, 0.574785, 0.070778, 0.625, 1, 0, 0, 1,
+0.036361, 0.603924, 0.036361, 0.625, 0.75, 0, 0, 1,
+0.036361, 0.622896, 0.036361, 0.625, 0.75, 0, 0, 1,
+-0.036361, 0.622896, 0.036361, 0.625, 1, 0, 0, 1,
+0.070778, 0.574785, 0.070778, 0.625, 0.75, 0, 0.7632, 0.6461,
+0.036361, 0.603924, 0.036361, 0.625, 0.75, 0, 0.7632, 0.6461,
+-0.036361, 0.603924, 0.036361, 0.625, 1, 0, 0.7632, 0.6461,
+-0.070778, 0.574785, -0.070778, 0.625, 0.25, 0, 0.7632, -0.6461,
+-0.036361, 0.603924, -0.036361, 0.625, 0.25, 0, 0.7632, -0.6461,
+0.036361, 0.603924, -0.036361, 0.625, 0.5, 0, 0.7632, -0.6461,
+0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.6461, 0.7632, 0,
+0.036361, 0.603924, -0.036361, 0.625, 0.5, 0.6461, 0.7632, 0,
+0.036361, 0.603924, 0.036361, 0.625, 0.75, 0.6461, 0.7632, 0,
+-0.036361, 0.622896, -0.036361, 0.625, 0.25, 0, -0.6177, -0.7864,
+-0.052774, 0.643794, -0.052774, 0.625, 0.25, 0, -0.6177, -0.7864,
+0.052774, 0.643794, -0.052774, 0.625, 0.5, 0, -0.6177, -0.7864,
+-0.036361, 0.603924, -0.036361, 0.625, 0.25, 0, 0, -1,
+-0.036361, 0.622896, -0.036361, 0.625, 0.25, 0, 0, -1,
+0.036361, 0.622896, -0.036361, 0.625, 0.5, 0, 0, -1,
+0.036361, 0.603924, -0.036361, 0.625, 0.5, 1, 0, 0,
+0.036361, 0.622896, -0.036361, 0.625, 0.5, 1, 0, 0,
+0.036361, 0.622896, 0.036361, 0.625, 0.75, 1, 0, 0,
+-0.036361, 0.603924, 0.036361, 0.625, 0, -1, 0, 0,
+-0.036361, 0.622896, 0.036361, 0.625, 0, -1, 0, 0,
+-0.036361, 0.622896, -0.036361, 0.625, 0.25, -1, 0, 0,
+0.036361, 0.622896, -0.036361, 0.625, 0.5, 0.7864, -0.6177, 0,
+0.052774, 0.643794, -0.052774, 0.625, 0.5, 0.7864, -0.6177, 0,
+0.052774, 0.643794, 0.052774, 0.625, 0.75, 0.7864, -0.6177, 0,
+-0.036361, 0.622896, 0.036361, 0.625, 0, -0.7864, -0.6177, 0,
+-0.052774, 0.643794, 0.052774, 0.625, 0, -0.7864, -0.6177, 0,
+-0.052774, 0.643794, -0.052774, 0.625, 0.25, -0.7864, -0.6177, 0,
+0.036361, 0.622896, 0.036361, 0.625, 0.75, 0, -0.6177, 0.7864,
+0.052774, 0.643794, 0.052774, 0.625, 0.75, 0, -0.6177, 0.7864,
+-0.052774, 0.643794, 0.052774, 0.625, 1, 0, -0.6177, 0.7864,
+-0.058197, 0.722006, -0.058197, 0.625, 0.25, 0, 0.5681, -0.8229,
+-0.028575, 0.764915, -0.028575, 0.625, 0.25, 0, 0.5681, -0.8229,
+0.028575, 0.764915, -0.028575, 0.625, 0.5, 0, 0.5681, -0.8229,
+0.052774, 0.643794, 0.052774, 0.625, 0.75, 0, -0.0692, 0.9976,
+0.058197, 0.722006, 0.058197, 0.625, 0.75, 0, -0.0692, 0.9976,
+-0.058197, 0.722006, 0.058197, 0.625, 1, 0, -0.0692, 0.9976,
+-0.028575, 0.764915, -0.028575, 0.875, 0.5, 0, 1, 0,
+-0.028575, 0.764915, 0.028575, 0.875, 0.75, 0, 1, 0,
+0.028575, 0.764915, 0.028575, 0.625, 0.75, 0, 1, 0,
+0.058197, 0.722006, -0.058197, 0.625, 0.5, 0.8229, 0.5681, 0,
+0.028575, 0.764915, -0.028575, 0.625, 0.5, 0.8229, 0.5681, 0,
+0.028575, 0.764915, 0.028575, 0.625, 0.75, 0.8229, 0.5681, 0,
+-0.058197, 0.722006, 0.058197, 0.625, 0, -0.8229, 0.5681, 0,
+-0.028575, 0.764915, 0.028575, 0.625, 0, -0.8229, 0.5681, 0,
+-0.028575, 0.764915, -0.028575, 0.625, 0.25, -0.8229, 0.5681, 0,
+0.058197, 0.722006, 0.058197, 0.625, 0.75, 0, 0.5681, 0.8229,
+0.028575, 0.764915, 0.028575, 0.625, 0.75, 0, 0.5681, 0.8229,
+-0.028575, 0.764915, 0.028575, 0.625, 1, 0, 0.5681, 0.8229,
+0.098092, 0.551623, -0.040654, 0.625, 0.5, 0, 0, -1,
+0.128092, 0.551623, -0.040654, 0.625, 0.5, 0, 0, -1,
+0.128092, 0.489106, -0.040654, 0.625, 0.5, 0, 0, -1,
+0.070778, 0.465943, -0.070778, 0.625, 0.5, 0.6468, -0.7627, 0,
+0.098092, 0.489106, -0.040654, 0.625, 0.5, 0.6468, -0.7627, 0,
+0.098092, 0.489106, 0.040654, 0.625, 0.75, 0.6468, -0.7627, 0,
+0.070778, 0.574785, -0.070778, 0.625, 0.5, 0.7408, 0, -0.6717,
+0.098092, 0.551623, -0.040654, 0.625, 0.5, 0.7408, 0, -0.6717,
+0.098092, 0.489106, -0.040654, 0.625, 0.5, 0.7408, 0, -0.6717,
+0.070778, 0.574785, 0.070778, 0.625, 0.75, 0.6468, 0.7627, 0,
+0.098092, 0.551623, 0.040654, 0.625, 0.75, 0.6468, 0.7627, 0,
+0.098092, 0.551623, -0.040654, 0.625, 0.5, 0.6468, 0.7627, 0,
+-0.098092, 0.551623, 0.040654, 0.625, 1, 0, 0, 1,
+-0.128092, 0.551623, 0.040654, 0.625, 1, 0, 0, 1,
+-0.128092, 0.489106, 0.040654, 0.625, 1, 0, 0, 1,
+-0.070778, 0.574785, -0.070778, 0.625, 0.25, -0.6468, 0.7627, 0,
+-0.098092, 0.551623, -0.040654, 0.625, 0.25, -0.6468, 0.7627, 0,
+-0.098092, 0.551623, 0.040654, 0.625, 0, -0.6468, 0.7627, 0,
+-0.070778, 0.574785, 0.070778, 0.625, 1, -0.7408, 0, 0.6717,
+-0.098092, 0.551623, 0.040654, 0.625, 1, -0.7408, 0, 0.6717,
+-0.098092, 0.489106, 0.040654, 0.625, 1, -0.7408, 0, 0.6717,
+-0.070778, 0.465943, 0.070778, 0.625, 0, -0.6468, -0.7627, 0,
+-0.098092, 0.489106, 0.040654, 0.625, 0, -0.6468, -0.7627, 0,
+-0.098092, 0.489106, -0.040654, 0.625, 0.25, -0.6468, -0.7627, 0,
+-0.128092, 0.489106, 0.040654, 0.625, 0, -1, 0, 0,
+-0.128092, 0.551623, 0.040654, 0.625, 0, -1, 0, 0,
+-0.128092, 0.551623, -0.040654, 0.625, 0.25, -1, 0, 0,
+-0.098092, 0.551623, -0.040654, 0.625, 0.25, 0, 1, 0,
+-0.128092, 0.551623, -0.040654, 0.625, 0.25, 0, 1, 0,
+-0.128092, 0.551623, 0.040654, 0.625, 0, 0, 1, 0,
+-0.098092, 0.489106, -0.040654, 0.625, 0.25, 0, 0, -1,
+-0.128092, 0.489106, -0.040654, 0.625, 0.25, 0, 0, -1,
+-0.128092, 0.551623, -0.040654, 0.625, 0.25, 0, 0, -1,
+0.098092, 0.489106, -0.040654, 0.625, 0.5, -0.9978, -0.0665, 0,
+0.103989, 0.400565, -0.024672, 0.625, 0.5, -0.9978, -0.0665, 0,
+0.103989, 0.400565, 0.024672, 0.625, 0.75, -0.9978, -0.0665, 0,
+0.128092, 0.489106, -0.040654, 0.625, 0.5, 1, 0, 0,
+0.128092, 0.551623, -0.040654, 0.625, 0.5, 1, 0, 0,
+0.128092, 0.551623, 0.040654, 0.625, 0.75, 1, 0, 0,
+0.128092, 0.489106, 0.040654, 0.625, 0.75, 0.9978, -0.0665, 0,
+0.122195, 0.400565, 0.024672, 0.625, 0.75, 0.9978, -0.0665, 0,
+0.122195, 0.400565, -0.024672, 0.625, 0.5, 0.9978, -0.0665, 0,
+0.098092, 0.489106, 0.040654, 0.625, 0.75, 0, 0, 1,
+0.128092, 0.489106, 0.040654, 0.625, 0.75, 0, 0, 1,
+0.128092, 0.551623, 0.040654, 0.625, 0.75, 0, 0, 1,
+0.098092, 0.551623, 0.040654, 0.625, 0.75, 0, 1, 0,
+0.128092, 0.551623, 0.040654, 0.625, 0.75, 0, 1, 0,
+0.128092, 0.551623, -0.040654, 0.625, 0.5, 0, 1, 0,
+-0.122195, 0.400565, 0.024672, 0.625, 1, 0, 0.239, 0.971,
+-0.128092, 0.335624, 0.040654, 0.625, 1, 0, 0.239, 0.971,
+-0.098092, 0.335624, 0.040654, 0.625, 1, 0, 0.239, 0.971,
+0.122195, 0.400565, 0.024672, 0.625, 0.75, 0.9952, 0.0956, 0.0214,
+0.128092, 0.335624, 0.040654, 0.625, 0.75, 0.9952, 0.0956, 0.0214,
+0.128092, 0.353791, -0.040654, 0.625, 0.5, 0.9952, 0.0956, 0.0214,
+0.098092, 0.489106, -0.040654, 0.625, 0.5, 0, -0.1776, -0.9841,
+0.128092, 0.489106, -0.040654, 0.625, 0.5, 0, -0.1776, -0.9841,
+0.122195, 0.400565, -0.024672, 0.625, 0.5, 0, -0.1776, -0.9841,
+-0.128092, 0.489106, -0.040654, 0.625, 0.25, -0.9978, -0.0665, 0,
+-0.122195, 0.400565, -0.024672, 0.625, 0.25, -0.9978, -0.0665, 0,
+-0.122195, 0.400565, 0.024672, 0.625, 0, -0.9978, -0.0665, 0,
+-0.098092, 0.489106, -0.040654, 0.625, 0.25, 0, -0.1776, -0.9841,
+-0.103989, 0.400565, -0.024672, 0.625, 0.25, 0, -0.1776, -0.9841,
+-0.122195, 0.400565, -0.024672, 0.625, 0.25, 0, -0.1776, -0.9841,
+-0.098092, 0.489106, 0.040654, 0.625, 1, 0, -0.1776, 0.9841,
+-0.128092, 0.489106, 0.040654, 0.625, 1, 0, -0.1776, 0.9841,
+-0.122195, 0.400565, 0.024672, 0.625, 1, 0, -0.1776, 0.9841,
+0.098092, 0.489106, 0.040654, 0.625, 0.75, 0, -0.1776, 0.9841,
+0.103989, 0.400565, 0.024672, 0.625, 0.75, 0, -0.1776, 0.9841,
+0.122195, 0.400565, 0.024672, 0.625, 0.75, 0, -0.1776, 0.9841,
+-0.098092, 0.489106, 0.040654, 0.625, 0, 0.9978, -0.0665, 0,
+-0.103989, 0.400565, 0.024672, 0.625, 0, 0.9978, -0.0665, 0,
+-0.103989, 0.400565, -0.024672, 0.625, 0.25, 0.9978, -0.0665, 0,
+0.098092, 0.335624, 0.040654, 0.625, 0.75, 0, -0.6592, 0.752,
+0.098092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.6592, 0.752,
+0.128092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.6592, 0.752,
+0.098092, 0.353791, -0.040654, 0.625, 0.5, -1, 0, 0,
+0.098092, 0.234285, -0.079572, 0.625, 0.5, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.625, 0.75, -1, 0, 0,
+-0.103989, 0.400565, 0.024672, 0.625, 0, 0.9952, 0.0956, 0.0214,
+-0.098092, 0.335624, 0.040654, 0.625, 0, 0.9952, 0.0956, 0.0214,
+-0.098092, 0.353791, -0.040654, 0.625, 0.25, 0.9952, 0.0956, 0.0214,
+0.122195, 0.400565, -0.024672, 0.625, 0.5, 0, 0.3233, -0.9463,
+0.128092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3233, -0.9463,
+0.098092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3233, -0.9463,
+-0.122195, 0.400565, -0.024672, 0.625, 0.25, 0, 0.3233, -0.9463,
+-0.103989, 0.400565, -0.024672, 0.625, 0.25, 0, 0.3233, -0.9463,
+-0.098092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3233, -0.9463,
+-0.122195, 0.400565, 0.024672, 0.625, 0, -0.9921, 0.1251, 0,
+-0.122195, 0.400565, -0.024672, 0.625, 0.25, -0.9921, 0.1251, 0,
+-0.128092, 0.353791, -0.040654, 0.625, 0.25, -0.9921, 0.1251, 0,
+0.103989, 0.400565, 0.024672, 0.625, 0.75, -0.9921, 0.1251, 0,
+0.103989, 0.400565, -0.024672, 0.625, 0.5, -0.9921, 0.1251, 0,
+0.098092, 0.353791, -0.040654, 0.625, 0.5, -0.9921, 0.1251, 0,
+0.103989, 0.400565, 0.024672, 0.625, 0.75, 0, 0.239, 0.971,
+0.098092, 0.335624, 0.040654, 0.625, 0.75, 0, 0.239, 0.971,
+0.128092, 0.335624, 0.040654, 0.625, 0.75, 0, 0.239, 0.971,
+-0.098092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.6843, -0.7292,
+-0.098092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.6843, -0.7292,
+-0.128092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.6843, -0.7292,
+0.128092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.6843, -0.7292,
+0.128092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.6843, -0.7292,
+0.098092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.6843, -0.7292,
+0.128092, 0.353791, -0.040654, 0.625, 0.5, 1, 0, 0,
+0.128092, 0.335624, 0.040654, 0.625, 0.75, 1, 0, 0,
+0.128092, 0.234285, -0.048174, 0.625, 0.75, 1, 0, 0,
+-0.128092, 0.335624, 0.040654, 0.625, 1, 0, -0.6592, 0.752,
+-0.128092, 0.234285, -0.048174, 0.625, 1, 0, -0.6592, 0.752,
+-0.098092, 0.234285, -0.048174, 0.625, 1, 0, -0.6592, 0.752,
+-0.098092, 0.353791, -0.040654, 0.625, 0.25, 1, 0, 0,
+-0.098092, 0.335624, 0.040654, 0.625, 0, 1, 0, 0,
+-0.098092, 0.234285, -0.048174, 0.625, 0, 1, 0, 0,
+0.128092, 0.353791, -0.040654, 0.625, 0.5, 0, 0.3097, -0.9508,
+0.128092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.3097, -0.9508,
+0.098092, 0.234285, -0.079572, 0.625, 0.5, 0, 0.3097, -0.9508,
+-0.098092, 0.353791, -0.040654, 0.625, 0.25, 0, 0.3097, -0.9508,
+-0.098092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.3097, -0.9508,
+-0.128092, 0.234285, -0.079572, 0.625, 0.25, 0, 0.3097, -0.9508,
+-0.128092, 0.353791, -0.040654, 0.625, 0.25, -1, 0, 0,
+-0.128092, 0.234285, -0.079572, 0.625, 0.25, -1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.625, 0, -1, 0, 0,
+0.098092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.1306, -0.9914,
+0.128092, 0.207583, -0.104626, 0.625, 0.5, 0, 0.1306, -0.9914,
+0.120592, 0.186814, -0.107362, 0.625, 0.5, 0, 0.1306, -0.9914,
+-0.098092, 0.192117, -0.077302, 0.625, 0, 0.9329, -0.3135, -0.1774,
+-0.105592, 0.179081, -0.0937, 0.625, 0, 0.9329, -0.3135, -0.1774,
+-0.105592, 0.186814, -0.107362, 0.625, 0.25, 0.9329, -0.3135, -0.1774,
+-0.128092, 0.234285, -0.079572, 0.625, 0.25, -1, 0, 0,
+-0.128092, 0.207583, -0.104626, 0.625, 0.25, -1, 0, 0,
+-0.128092, 0.192117, -0.077302, 0.625, 0, -1, 0, 0,
+0.098092, 0.234285, -0.079572, 0.625, 0.5, -1, 0, 0,
+0.098092, 0.207583, -0.104626, 0.625, 0.5, -1, 0, 0,
+0.098092, 0.192117, -0.077302, 0.625, 0.75, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.625, 0.75, 0, -0.5684, 0.8228,
+0.098092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.5684, 0.8228,
+0.128092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.5684, 0.8228,
+0.128092, 0.234285, -0.079572, 0.625, 0.5, 1, 0, 0,
+0.128092, 0.234285, -0.048174, 0.625, 0.75, 1, 0, 0,
+0.128092, 0.192117, -0.077302, 0.625, 0.75, 1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.625, 1, 0, -0.5684, 0.8228,
+-0.128092, 0.192117, -0.077302, 0.625, 1, 0, -0.5684, 0.8228,
+-0.098092, 0.192117, -0.077302, 0.625, 1, 0, -0.5684, 0.8228,
+-0.098092, 0.234285, -0.079572, 0.625, 0.25, 1, 0, 0,
+-0.098092, 0.234285, -0.048174, 0.625, 0, 1, 0, 0,
+-0.098092, 0.192117, -0.077302, 0.625, 0, 1, 0, 0,
+-0.105592, 0.179081, -0.0937, 0.625, 0, 0, -0.8703, -0.4926,
+-0.120592, 0.179081, -0.0937, 0.625, 0, 0, -0.8703, -0.4926,
+-0.120592, 0.186814, -0.107362, 0.625, 0.25, 0, -0.8703, -0.4926,
+0.105592, 0.186814, -0.107362, 0.625, 0.5, 0, -0.8703, -0.4926,
+0.120592, 0.186814, -0.107362, 0.625, 0.5, 0, -0.8703, -0.4926,
+0.120592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.8703, -0.4926,
+-0.098092, 0.207583, -0.104626, 0.625, 0.25, 0, 0.1306, -0.9914,
+-0.105592, 0.186814, -0.107362, 0.625, 0.25, 0, 0.1306, -0.9914,
+-0.120592, 0.186814, -0.107362, 0.625, 0.25, 0, 0.1306, -0.9914,
+-0.128092, 0.192117, -0.077302, 0.625, 0, -0.9329, -0.3135, -0.1774,
+-0.128092, 0.207583, -0.104626, 0.625, 0.25, -0.9329, -0.3135, -0.1774,
+-0.120592, 0.186814, -0.107362, 0.625, 0.25, -0.9329, -0.3135, -0.1774,
+0.098092, 0.192117, -0.077302, 0.625, 0.75, -0.9329, -0.3135, -0.1774,
+0.098092, 0.207583, -0.104626, 0.625, 0.5, -0.9329, -0.3135, -0.1774,
+0.105592, 0.186814, -0.107362, 0.625, 0.5, -0.9329, -0.3135, -0.1774,
+0.098092, 0.192117, -0.077302, 0.625, 0.75, 0, -0.7828, 0.6223,
+0.105592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.7828, 0.6223,
+0.120592, 0.179081, -0.0937, 0.625, 0.75, 0, -0.7828, 0.6223,
+0.128092, 0.192117, -0.077302, 0.625, 0.75, 0.9329, -0.3135, -0.1774,
+0.120592, 0.179081, -0.0937, 0.625, 0.75, 0.9329, -0.3135, -0.1774,
+0.120592, 0.186814, -0.107362, 0.625, 0.5, 0.9329, -0.3135, -0.1774,
+-0.098092, 0.192117, -0.077302, 0.625, 1, 0, -0.7828, 0.6223,
+-0.128092, 0.192117, -0.077302, 0.625, 1, 0, -0.7828, 0.6223,
+-0.120592, 0.179081, -0.0937, 0.625, 1, 0, -0.7828, 0.6223,
+-0.052774, 0.643794, 0.052774, 0.625, 0, -0.9976, -0.0692, 0,
+-0.058197, 0.722006, -0.058197, 0.625, 0.25, -0.9976, -0.0692, 0,
+-0.052774, 0.643794, -0.052774, 0.625, 0.25, -0.9976, -0.0692, 0,
+-0.052774, 0.643794, -0.052774, 0.625, 0.25, 0, -0.0692, -0.9976,
+0.058197, 0.722006, -0.058197, 0.625, 0.5, 0, -0.0692, -0.9976,
+0.052774, 0.643794, -0.052774, 0.625, 0.5, 0, -0.0692, -0.9976,
+0.052774, 0.643794, -0.052774, 0.625, 0.5, 0.9976, -0.0692, 0,
+0.058197, 0.722006, 0.058197, 0.625, 0.75, 0.9976, -0.0692, 0,
+0.052774, 0.643794, 0.052774, 0.625, 0.75, 0.9976, -0.0692, 0,
+-0.052774, 0.643794, 0.052774, 0.625, 0, -0.9976, -0.0692, 0,
+-0.058197, 0.722006, 0.058197, 0.625, 0, -0.9976, -0.0692, 0,
+-0.058197, 0.722006, -0.058197, 0.625, 0.25, -0.9976, -0.0692, 0,
+-0.052774, 0.643794, -0.052774, 0.625, 0.25, 0, -0.0692, -0.9976,
+-0.058197, 0.722006, -0.058197, 0.625, 0.25, 0, -0.0692, -0.9976,
+0.058197, 0.722006, -0.058197, 0.625, 0.5, 0, -0.0692, -0.9976,
+0.052774, 0.643794, -0.052774, 0.625, 0.5, 0.9976, -0.0692, 0,
+0.058197, 0.722006, -0.058197, 0.625, 0.5, 0.9976, -0.0692, 0,
+0.058197, 0.722006, 0.058197, 0.625, 0.75, 0.9976, -0.0692, 0,
+-0.03964, 0.319577, 0.03964, 0.625, 0, -0.9781, -0.2081, 0,
+-0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.9781, -0.2081, 0,
+-0.03964, 0.319577, -0.03964, 0.625, 0.25, -0.9781, -0.2081, 0,
+0.03964, 0.319577, 0.03964, 0.625, 0.75, 0, -0.2081, 0.9781,
+-0.070778, 0.465943, 0.070778, 0.625, 1, 0, -0.2081, 0.9781,
+-0.03964, 0.319577, 0.03964, 0.625, 1, 0, -0.2081, 0.9781,
+-0.03964, 0.319577, -0.03964, 0.625, 0.25, 0, -0.2081, -0.9781,
+0.070778, 0.465943, -0.070778, 0.625, 0.5, 0, -0.2081, -0.9781,
+0.03964, 0.319577, -0.03964, 0.625, 0.5, 0, -0.2081, -0.9781,
+0.03964, 0.319577, -0.03964, 0.625, 0.5, 0.9781, -0.2081, 0,
+0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.9781, -0.2081, 0,
+0.03964, 0.319577, 0.03964, 0.625, 0.75, 0.9781, -0.2081, 0,
+-0.03964, 0.319577, 0.03964, 0.625, 0, -0.9781, -0.2081, 0,
+-0.070778, 0.465943, 0.070778, 0.625, 0, -0.9781, -0.2081, 0,
+-0.070778, 0.465943, -0.070778, 0.625, 0.25, -0.9781, -0.2081, 0,
+0.03964, 0.319577, 0.03964, 0.625, 0.75, 0, -0.2081, 0.9781,
+0.070778, 0.465943, 0.070778, 0.625, 0.75, 0, -0.2081, 0.9781,
+-0.070778, 0.465943, 0.070778, 0.625, 1, 0, -0.2081, 0.9781,
+-0.03964, 0.319577, -0.03964, 0.625, 0.25, 0, -0.2081, -0.9781,
+-0.070778, 0.465943, -0.070778, 0.625, 0.25, 0, -0.2081, -0.9781,
+0.070778, 0.465943, -0.070778, 0.625, 0.5, 0, -0.2081, -0.9781,
+0.03964, 0.319577, -0.03964, 0.625, 0.5, 0.9781, -0.2081, 0,
+0.070778, 0.465943, -0.070778, 0.625, 0.5, 0.9781, -0.2081, 0,
+0.070778, 0.465943, 0.070778, 0.625, 0.75, 0.9781, -0.2081, 0,
+];
+
+objArray.push(Robot_data);
+
+
+groupArray.push(
+ new VertGroup(
+ 0, // material number
+ 0, // object number
+ 0, // starting face
+ 522, // length
+ )
+);
+
+groupArray.push(
+ new VertGroup(
+ 1, // material number
+ 0, // object number
+ 522, // starting face
+ 18, // length
+ )
+);
+
+groupArray.push(
+ new VertGroup(
+ 2, // material number
+ 0, // object number
+ 540, // starting face
+ 24, // length
+ )
+);
diff --git a/aswebglue/examples/MousePoint/README.md b/aswebglue/examples/MousePoint/README.md
new file mode 100644
index 0000000..8b6b8be
--- /dev/null
+++ b/aswebglue/examples/MousePoint/README.md
@@ -0,0 +1,4 @@
+# Mouse Point
+
+This example renders points that fade away as the mouse moves away from them. It does this with a point class and an array of those points. The point gets activated and the alpha value is set to full opacity.
+The point then fades out by altering the alpha value as it moves. The active point data is copied into the array buffer to be rendered on the canvas.
\ No newline at end of file
diff --git a/aswebglue/examples/MousePoint/index.html b/aswebglue/examples/MousePoint/index.html
new file mode 100644
index 0000000..f4e6c13
--- /dev/null
+++ b/aswebglue/examples/MousePoint/index.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+ Mouse Point Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/MousePoint/mouse_point.ts b/aswebglue/examples/MousePoint/mouse_point.ts
new file mode 100644
index 0000000..24a0a6a
--- /dev/null
+++ b/aswebglue/examples/MousePoint/mouse_point.ts
@@ -0,0 +1,166 @@
+/**
+ * @author Rick Battagline / https://embed.com
+ */
+
+import {WebGLRenderingContext, WebGLShader, WebGLProgram, WebGLBuffer, GLint, WebGLUniformLocation} from '../../WebGL';
+
+// SRC_ALPHA
+// ONE_MINUS_SRC_ALPHA
+// prettier-ignore
+let point_data: StaticArray = [
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+];
+
+class Point {
+ public x: f32 = 0.0;
+ public y: f32 = 0.0;
+ public alpha: f32 = 1.0;
+ public visible: bool = false;
+ public index: i32 = 0;
+
+ constructor(index: i32) {
+ this.index = index;
+ }
+
+ public activate(x: f32, y: f32): void {
+ this.x = x;
+ this.y = y;
+ this.visible = true;
+ this.alpha = 1.0;
+ }
+
+ public move(): void {
+ this.alpha -= second_delta * 2;
+
+ if (this.alpha < 0.0) {
+ this.visible = false;
+ this.alpha = 0.0;
+ }
+
+ point_data[this.index * 3] = this.x;
+ point_data[this.index * 3 + 1] = this.y;
+ point_data[this.index * 3 + 2] = this.alpha;
+ }
+}
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ layout(location = 0) in vec2 position;
+ layout(location = 1) in float alpha;
+ out vec4 c;
+
+ void main() {
+ gl_Position = vec4( position.x, position.y, 0.0, 1.0 );
+ gl_PointSize = 8.0;
+ float a = clamp(alpha, 0.0, 1.0);
+ c = vec4(1.0,1.0,0.0,a);
+
+ }
+`;
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+// initialize webgl
+var second_delta: f32 = 0.0;
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+let alpha_al: GLint = gl.getAttribLocation(program, 'alpha');
+gl.enableVertexAttribArray(alpha_al);
+
+gl.enable(gl.BLEND);
+gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+
+let point_index: i32 = 0;
+
+// prettier-ignore
+let point_list: StaticArray = [
+ new Point(0), new Point(1), new Point(2), new Point(3), new Point(4),
+ new Point(5), new Point(6), new Point(7), new Point(8), new Point(9),
+ new Point(10), new Point(11), new Point(12), new Point(13), new Point(14),
+ new Point(15), new Point(16), new Point(17), new Point(18), new Point(19),
+ new Point(20), new Point(21), new Point(22), new Point(23), new Point(24),
+ new Point(25), new Point(26), new Point(27), new Point(28), new Point(29),
+ new Point(30), new Point(31), new Point(32), new Point(33), new Point(34),
+ new Point(35), new Point(36), new Point(37), new Point(38), new Point(39),
+ new Point(40), new Point(41), new Point(42), new Point(43), new Point(44),
+ new Point(45), new Point(46), new Point(47), new Point(48), new Point(49),
+ new Point(50), new Point(51), new Point(52), new Point(53), new Point(54),
+ new Point(55), new Point(56), new Point(57), new Point(58), new Point(59),
+ new Point(60), new Point(61), new Point(62), new Point(63), new Point(64),
+ new Point(65), new Point(66), new Point(67), new Point(68), new Point(69),
+];
+
+var prev_x: f32 = 0.0;
+var prev_y: f32 = 0.0;
+
+export function displayLoop(delta: i32, mouse_x: f32, mouse_y: f32): void {
+ second_delta = delta / 1000.0;
+ for (let i: i32 = 0; i < point_list.length; i++) {
+ point_list[i].move();
+ }
+
+ if (prev_x != mouse_x || prev_y != mouse_y) {
+ point_index++;
+ if (point_index >= point_list.length) {
+ point_index = 0;
+ }
+ point_list[point_index].activate(mouse_x, mouse_y);
+ prev_x = mouse_x;
+ prev_y = mouse_y;
+ }
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gl.bufferData(gl.ARRAY_BUFFER, point_data, gl.DYNAMIC_DRAW);
+
+ //vertexAttribPointer attribute | dimensions | data type | normalize | stride bytes | offset bytes
+ gl.vertexAttribPointer(position_al, 2, gl.FLOAT, +false, 12, 0);
+ gl.vertexAttribPointer(alpha_al, 1, gl.FLOAT, +false, 12, 8);
+
+ gl.drawArrays(gl.POINTS, 0, point_list.length);
+}
diff --git a/aswebglue/examples/NormalModel/LunarMap.png b/aswebglue/examples/NormalModel/LunarMap.png
new file mode 100644
index 0000000..1a70471
Binary files /dev/null and b/aswebglue/examples/NormalModel/LunarMap.png differ
diff --git a/aswebglue/examples/NormalModel/LunarMapOG.png b/aswebglue/examples/NormalModel/LunarMapOG.png
new file mode 100644
index 0000000..1d9c30a
Binary files /dev/null and b/aswebglue/examples/NormalModel/LunarMapOG.png differ
diff --git a/aswebglue/examples/NormalModel/LunarNormalMap.png b/aswebglue/examples/NormalModel/LunarNormalMap.png
new file mode 100644
index 0000000..9d18195
Binary files /dev/null and b/aswebglue/examples/NormalModel/LunarNormalMap.png differ
diff --git a/aswebglue/examples/NormalModel/Moon_Sphere.ts b/aswebglue/examples/NormalModel/Moon_Sphere.ts
new file mode 100644
index 0000000..100ee86
--- /dev/null
+++ b/aswebglue/examples/NormalModel/Moon_Sphere.ts
@@ -0,0 +1,2949 @@
+
+export class VertGroup {
+ mat_index: i32;
+ obj_index: i32;
+ start_face: i32;
+ length: i32;
+
+ constructor(material_index: i32, object_index: i32, starting_face: i32, len: i32 ) {
+ this.mat_index = material_index;
+ this.obj_index = object_index;
+ this.start_face = starting_face;
+ this.length = len;
+ }
+}
+
+export class MaterialMap {
+ ambient: string | null;
+ diffuse: string | null;
+ specular: string | null;
+ emission: string | null;
+ bump: string | null;
+
+ constructor( Ka: string | null, Kd: string | null,
+ Ks: string | null, Ke: string | null,
+ Bump: string | null ) {
+ this.ambient = Ka;
+ this.diffuse = Kd;
+ this.specular = Ks;
+ this.emission = Ke;
+ this.bump = Bump;
+ }
+}
+
+export var objArray = new Array>(); //1
+export var matArray = new Array>(); //1
+export var groupArray = new Array(); //0
+export var matMapArray = new Array(); //BBB
+
+export var Material_001_mat:StaticArray = [
+ 225.000000, // specularExponent
+ 1.000000, 1.000000, 1.000000, // ambientReflectivity
+ 0.800000, 0.800000, 0.800000, // diffuseReflectivity
+ 0.500000, 0.500000, 0.500000, // specularReflectivity
+ 0.000000, 0.000000, 0.000000, // emission
+ 1.450000, // opticalDensity
+ 1.000000, // dissolveFactor
+ 2, // illuminationModel
+ ];
+
+matMapArray.push(new MaterialMap(null, 'LunarMap.png', null, null, 'LunarNormalMap.png'));
+
+matArray.push(Material_001_mat);
+
+
+export var Moon_Sphere_data: StaticArray =[
+//X, Y, Z, U, V, NX, NY, NZ
+ 0, 0, -0.7, 0.75, 0.5, 0, 0, -1,
+0.133939, -0.136563, -0.673358, 0.71875, 0.4375, 0.1914, -0.1939, -0.9622,
+ 0, -0.136563, -0.68655, 0.75, 0.4375, 0, -0.1939, -0.981,
+ 0, 0.68655, -0.136563, 0.75, 0.9375, 0, 0.9796, -0.201,
+0.052261, 0.646716, -0.262731, 0.71875, 0.875, 0.0757, 0.9217, -0.3804,
+ 0, 0.646716, -0.267878, 0.75, 0.875, 0, 0.9217, -0.3879,
+ 0, -0.136563, -0.68655, 0.75, 0.4375, 0, -0.1939, -0.981,
+0.126168, -0.267878, -0.634289, 0.71875, 0.375, 0.1804, -0.3805, -0.907,
+ 0, -0.267878, -0.646715, 0.75, 0.375, 0, -0.3805, -0.9247,
+ 0, 0.582029, -0.388899, 0.75, 0.8125, 0, 0.8286, -0.5598,
+0.052261, 0.646716, -0.262731, 0.71875, 0.875, 0.0757, 0.9217, -0.3804,
+0.075871, 0.582029, -0.381427, 0.71875, 0.8125, 0.1092, 0.8286, -0.549,
+ 0, -0.267878, -0.646715, 0.75, 0.375, 0, -0.3805, -0.9247,
+0.113548, -0.388899, -0.570845, 0.71875, 0.3125, 0.1626, -0.5528, -0.8173,
+ 0, -0.388899, -0.582028, 0.75, 0.3125, 0, -0.5528, -0.8333,
+ 0, 0.582029, -0.388899, 0.75, 0.8125, 0, 0.8286, -0.5598,
+0.096565, 0.494975, -0.485464, 0.71875, 0.75, 0.1385, 0.704, -0.6965,
+ 0, 0.494975, -0.494975, 0.75, 0.75, 0, 0.704, -0.7101,
+ 0, -0.388899, -0.582028, 0.75, 0.3125, 0, -0.5528, -0.8333,
+0.096565, -0.494975, -0.485464, 0.71875, 0.25, 0.1385, -0.704, -0.6965,
+ 0, -0.494975, -0.494974, 0.75, 0.25, 0, -0.704, -0.7101,
+ 0, 0.494975, -0.494975, 0.75, 0.75, 0, 0.704, -0.7101,
+0.113548, 0.388899, -0.570845, 0.71875, 0.6875, 0.1626, 0.5528, -0.8173,
+ 0, 0.388899, -0.582029, 0.75, 0.6875, 0, 0.5528, -0.8333,
+ 0, -0.494975, -0.494974, 0.75, 0.25, 0, -0.704, -0.7101,
+0.075871, -0.582029, -0.381427, 0.71875, 0.1875, 0.1092, -0.8286, -0.549,
+ 0, -0.582029, -0.388899, 0.75, 0.1875, 0, -0.8286, -0.5598,
+ 0, 0.388899, -0.582029, 0.75, 0.6875, 0, 0.5528, -0.8333,
+0.126168, 0.267878, -0.634289, 0.71875, 0.625, 0.1804, 0.3805, -0.907,
+ 0, 0.267878, -0.646716, 0.75, 0.625, 0, 0.3805, -0.9247,
+ 0, -0.582029, -0.388899, 0.75, 0.1875, 0, -0.8286, -0.5598,
+0.052261, -0.646716, -0.262731, 0.71875, 0.125, 0.0757, -0.9217, -0.3804,
+ 0, -0.646716, -0.267878, 0.75, 0.125, 0, -0.9217, -0.3879,
+ 0, 0.267878, -0.646716, 0.75, 0.625, 0, 0.3805, -0.9247,
+0.133939, 0.136563, -0.673358, 0.71875, 0.5625, 0.1914, 0.1939, -0.9622,
+ 0, 0.136563, -0.68655, 0.75, 0.5625, 0, 0.1939, -0.981,
+ 0, -0.646716, -0.267878, 0.75, 0.125, 0, -0.9217, -0.3879,
+0.026642, -0.68655, -0.133939, 0.71875, 0.0625, 0.0392, -0.9796, -0.1971,
+ 0, -0.68655, -0.136563, 0.75, 0.0625, 0, -0.9796, -0.201,
+ 0, 0.136563, -0.68655, 0.75, 0.5625, 0, 0.1939, -0.981,
+0.136563, 0, -0.68655, 0.71875, 0.5, 0.1951, 0, -0.9808,
+ 0, 0, -0.7, 0.75, 0.5, 0, 0, -1,
+ 0, 0.68655, -0.136563, 0.75, 0.9375, 0, 0.9796, -0.201,
+ 0, 0.7, 0, 0.734375, 1, 0, 1, 0,
+0.026642, 0.68655, -0.133939, 0.71875, 0.9375, 0.0392, 0.9796, -0.1971,
+ 0, -0.7, 0, 0.734375, 0, 0, -1, 0,
+ 0, -0.68655, -0.136563, 0.75, 0.0625, 0, -0.9796, -0.201,
+0.026642, -0.68655, -0.133939, 0.71875, 0.0625, 0.0392, -0.9796, -0.1971,
+0.052261, -0.646716, -0.262731, 0.71875, 0.125, 0.0757, -0.9217, -0.3804,
+0.052261, -0.68655, -0.126168, 0.6875, 0.0625, 0.0769, -0.9796, -0.1856,
+0.026642, -0.68655, -0.133939, 0.71875, 0.0625, 0.0392, -0.9796, -0.1971,
+0.133939, 0.136563, -0.673358, 0.71875, 0.5625, 0.1914, 0.1939, -0.9622,
+0.267878, 0, -0.646716, 0.6875, 0.5, 0.3827, 0, -0.9239,
+0.136563, 0, -0.68655, 0.71875, 0.5, 0.1951, 0, -0.9808,
+0.026642, 0.68655, -0.133939, 0.71875, 0.9375, 0.0392, 0.9796, -0.1971,
+ 0, 0.7, 0, 0.703125, 1, 0, 1, 0,
+0.052261, 0.68655, -0.126168, 0.6875, 0.9375, 0.0769, 0.9796, -0.1856,
+ 0, -0.7, 0, 0.703125, 0, 0, -1, 0,
+0.026642, -0.68655, -0.133939, 0.71875, 0.0625, 0.0392, -0.9796, -0.1971,
+0.052261, -0.68655, -0.126168, 0.6875, 0.0625, 0.0769, -0.9796, -0.1856,
+0.133939, -0.136563, -0.673358, 0.71875, 0.4375, 0.1914, -0.1939, -0.9622,
+0.267878, 0, -0.646716, 0.6875, 0.5, 0.3827, 0, -0.9239,
+0.262731, -0.136563, -0.634289, 0.6875, 0.4375, 0.3754, -0.1939, -0.9063,
+0.026642, 0.68655, -0.133939, 0.71875, 0.9375, 0.0392, 0.9796, -0.1971,
+0.102513, 0.646716, -0.247487, 0.6875, 0.875, 0.1484, 0.9217, -0.3583,
+0.052261, 0.646716, -0.262731, 0.71875, 0.875, 0.0757, 0.9217, -0.3804,
+0.126168, -0.267878, -0.634289, 0.71875, 0.375, 0.1804, -0.3805, -0.907,
+0.262731, -0.136563, -0.634289, 0.6875, 0.4375, 0.3754, -0.1939, -0.9063,
+0.247487, -0.267878, -0.597487, 0.6875, 0.375, 0.3539, -0.3805, -0.8544,
+0.052261, 0.646716, -0.262731, 0.71875, 0.875, 0.0757, 0.9217, -0.3804,
+0.148825, 0.582029, -0.359296, 0.6875, 0.8125, 0.2142, 0.8286, -0.5171,
+0.075871, 0.582029, -0.381427, 0.71875, 0.8125, 0.1092, 0.8286, -0.549,
+0.126168, -0.267878, -0.634289, 0.71875, 0.375, 0.1804, -0.3805, -0.907,
+0.222733, -0.388899, -0.537724, 0.6875, 0.3125, 0.3189, -0.5528, -0.7699,
+0.113548, -0.388899, -0.570845, 0.71875, 0.3125, 0.1626, -0.5528, -0.8173,
+0.075871, 0.582029, -0.381427, 0.71875, 0.8125, 0.1092, 0.8286, -0.549,
+0.189419, 0.494975, -0.457297, 0.6875, 0.75, 0.2717, 0.704, -0.6561,
+0.096565, 0.494975, -0.485464, 0.71875, 0.75, 0.1385, 0.704, -0.6965,
+0.096565, -0.494975, -0.485464, 0.71875, 0.25, 0.1385, -0.704, -0.6965,
+0.222733, -0.388899, -0.537724, 0.6875, 0.3125, 0.3189, -0.5528, -0.7699,
+0.189419, -0.494975, -0.457297, 0.6875, 0.25, 0.2717, -0.704, -0.6561,
+0.096565, 0.494975, -0.485464, 0.71875, 0.75, 0.1385, 0.704, -0.6965,
+0.222733, 0.388899, -0.537724, 0.6875, 0.6875, 0.3189, 0.5528, -0.7699,
+0.113548, 0.388899, -0.570845, 0.71875, 0.6875, 0.1626, 0.5528, -0.8173,
+0.096565, -0.494975, -0.485464, 0.71875, 0.25, 0.1385, -0.704, -0.6965,
+0.148825, -0.582029, -0.359296, 0.6875, 0.1875, 0.2142, -0.8286, -0.5171,
+0.075871, -0.582029, -0.381427, 0.71875, 0.1875, 0.1092, -0.8286, -0.549,
+0.113548, 0.388899, -0.570845, 0.71875, 0.6875, 0.1626, 0.5528, -0.8173,
+0.247487, 0.267878, -0.597487, 0.6875, 0.625, 0.3539, 0.3805, -0.8544,
+0.126168, 0.267878, -0.634289, 0.71875, 0.625, 0.1804, 0.3805, -0.907,
+0.075871, -0.582029, -0.381427, 0.71875, 0.1875, 0.1092, -0.8286, -0.549,
+0.102513, -0.646716, -0.247487, 0.6875, 0.125, 0.1484, -0.9217, -0.3583,
+0.052261, -0.646716, -0.262731, 0.71875, 0.125, 0.0757, -0.9217, -0.3804,
+0.126168, 0.267878, -0.634289, 0.71875, 0.625, 0.1804, 0.3805, -0.907,
+0.262731, 0.136563, -0.634289, 0.6875, 0.5625, 0.3754, 0.1939, -0.9063,
+0.133939, 0.136563, -0.673358, 0.71875, 0.5625, 0.1914, 0.1939, -0.9622,
+0.189419, -0.494975, -0.457297, 0.6875, 0.25, 0.2717, -0.704, -0.6561,
+0.323358, -0.388899, -0.483939, 0.65625, 0.3125, 0.463, -0.5528, -0.6929,
+0.274993, -0.494975, -0.411556, 0.65625, 0.25, 0.3945, -0.704, -0.5904,
+0.189419, 0.494975, -0.457297, 0.6875, 0.75, 0.2717, 0.704, -0.6561,
+0.323358, 0.388899, -0.483939, 0.65625, 0.6875, 0.463, 0.5528, -0.6929,
+0.222733, 0.388899, -0.537724, 0.6875, 0.6875, 0.3189, 0.5528, -0.7699,
+0.189419, -0.494975, -0.457297, 0.6875, 0.25, 0.2717, -0.704, -0.6561,
+0.216061, -0.582029, -0.323358, 0.65625, 0.1875, 0.311, -0.8286, -0.4654,
+0.148825, -0.582029, -0.359296, 0.6875, 0.1875, 0.2142, -0.8286, -0.5171,
+0.222733, 0.388899, -0.537724, 0.6875, 0.6875, 0.3189, 0.5528, -0.7699,
+0.359296, 0.267878, -0.537724, 0.65625, 0.625, 0.5137, 0.3805, -0.7689,
+0.247487, 0.267878, -0.597487, 0.6875, 0.625, 0.3539, 0.3805, -0.8544,
+0.148825, -0.582029, -0.359296, 0.6875, 0.1875, 0.2142, -0.8286, -0.5171,
+0.148825, -0.646716, -0.222733, 0.65625, 0.125, 0.2155, -0.9217, -0.3225,
+0.102513, -0.646716, -0.247487, 0.6875, 0.125, 0.1484, -0.9217, -0.3583,
+0.262731, 0.136563, -0.634289, 0.6875, 0.5625, 0.3754, 0.1939, -0.9063,
+0.359296, 0.267878, -0.537724, 0.65625, 0.625, 0.5137, 0.3805, -0.7689,
+0.381427, 0.136563, -0.570845, 0.65625, 0.5625, 0.545, 0.1939, -0.8157,
+0.102513, -0.646716, -0.247487, 0.6875, 0.125, 0.1484, -0.9217, -0.3583,
+0.07587, -0.68655, -0.113548, 0.65625, 0.0625, 0.1116, -0.9796, -0.1671,
+0.052261, -0.68655, -0.126168, 0.6875, 0.0625, 0.0769, -0.9796, -0.1856,
+0.262731, 0.136563, -0.634289, 0.6875, 0.5625, 0.3754, 0.1939, -0.9063,
+0.388899, 0, -0.582029, 0.65625, 0.5, 0.5556, 0, -0.8314,
+0.267878, 0, -0.646716, 0.6875, 0.5, 0.3827, 0, -0.9239,
+0.052261, 0.68655, -0.126168, 0.6875, 0.9375, 0.0769, 0.9796, -0.1856,
+ 0, 0.7, 0, 0.671875, 1, 0, 1, 0,
+0.075871, 0.68655, -0.113548, 0.65625, 0.9375, 0.1116, 0.9796, -0.1671,
+ 0, -0.7, 0, 0.671875, 0, 0, -1, 0,
+0.052261, -0.68655, -0.126168, 0.6875, 0.0625, 0.0769, -0.9796, -0.1856,
+0.07587, -0.68655, -0.113548, 0.65625, 0.0625, 0.1116, -0.9796, -0.1671,
+0.267878, 0, -0.646716, 0.6875, 0.5, 0.3827, 0, -0.9239,
+0.381427, -0.136563, -0.570845, 0.65625, 0.4375, 0.545, -0.1939, -0.8157,
+0.262731, -0.136563, -0.634289, 0.6875, 0.4375, 0.3754, -0.1939, -0.9063,
+0.052261, 0.68655, -0.126168, 0.6875, 0.9375, 0.0769, 0.9796, -0.1856,
+0.148825, 0.646716, -0.222733, 0.65625, 0.875, 0.2155, 0.9217, -0.3225,
+0.102513, 0.646716, -0.247487, 0.6875, 0.875, 0.1484, 0.9217, -0.3583,
+0.262731, -0.136563, -0.634289, 0.6875, 0.4375, 0.3754, -0.1939, -0.9063,
+0.359296, -0.267878, -0.537724, 0.65625, 0.375, 0.5137, -0.3805, -0.7689,
+0.247487, -0.267878, -0.597487, 0.6875, 0.375, 0.3539, -0.3805, -0.8544,
+0.102513, 0.646716, -0.247487, 0.6875, 0.875, 0.1484, 0.9217, -0.3583,
+0.216061, 0.582029, -0.323358, 0.65625, 0.8125, 0.311, 0.8286, -0.4654,
+0.148825, 0.582029, -0.359296, 0.6875, 0.8125, 0.2142, 0.8286, -0.5171,
+0.222733, -0.388899, -0.537724, 0.6875, 0.3125, 0.3189, -0.5528, -0.7699,
+0.359296, -0.267878, -0.537724, 0.65625, 0.375, 0.5137, -0.3805, -0.7689,
+0.323358, -0.388899, -0.483939, 0.65625, 0.3125, 0.463, -0.5528, -0.6929,
+0.148825, 0.582029, -0.359296, 0.6875, 0.8125, 0.2142, 0.8286, -0.5171,
+0.274993, 0.494975, -0.411556, 0.65625, 0.75, 0.3945, 0.704, -0.5904,
+0.189419, 0.494975, -0.457297, 0.6875, 0.75, 0.2717, 0.704, -0.6561,
+0.075871, 0.68655, -0.113548, 0.65625, 0.9375, 0.1116, 0.9796, -0.1671,
+ 0, 0.7, 0, 0.640625, 1, 0, 1, 0,
+0.096565, 0.68655, -0.096565, 0.625, 0.9375, 0.1421, 0.9796, -0.1421,
+ 0, -0.7, 0, 0.640625, 0, 0, -1, 0,
+0.07587, -0.68655, -0.113548, 0.65625, 0.0625, 0.1116, -0.9796, -0.1671,
+0.096565, -0.68655, -0.096565, 0.625, 0.0625, 0.1421, -0.9796, -0.1421,
+0.388899, 0, -0.582029, 0.65625, 0.5, 0.5556, 0, -0.8314,
+0.485464, -0.136563, -0.485464, 0.625, 0.4375, 0.6937, -0.1939, -0.6937,
+0.381427, -0.136563, -0.570845, 0.65625, 0.4375, 0.545, -0.1939, -0.8157,
+0.075871, 0.68655, -0.113548, 0.65625, 0.9375, 0.1116, 0.9796, -0.1671,
+0.189419, 0.646716, -0.189419, 0.625, 0.875, 0.2743, 0.9217, -0.2743,
+0.148825, 0.646716, -0.222733, 0.65625, 0.875, 0.2155, 0.9217, -0.3225,
+0.381427, -0.136563, -0.570845, 0.65625, 0.4375, 0.545, -0.1939, -0.8157,
+0.457297, -0.267878, -0.457297, 0.625, 0.375, 0.6539, -0.3805, -0.6539,
+0.359296, -0.267878, -0.537724, 0.65625, 0.375, 0.5137, -0.3805, -0.7689,
+0.148825, 0.646716, -0.222733, 0.65625, 0.875, 0.2155, 0.9217, -0.3225,
+0.274993, 0.582029, -0.274993, 0.625, 0.8125, 0.3958, 0.8286, -0.3958,
+0.216061, 0.582029, -0.323358, 0.65625, 0.8125, 0.311, 0.8286, -0.4654,
+0.323358, -0.388899, -0.483939, 0.65625, 0.3125, 0.463, -0.5528, -0.6929,
+0.457297, -0.267878, -0.457297, 0.625, 0.375, 0.6539, -0.3805, -0.6539,
+0.411557, -0.388899, -0.411556, 0.625, 0.3125, 0.5893, -0.5528, -0.5893,
+0.216061, 0.582029, -0.323358, 0.65625, 0.8125, 0.311, 0.8286, -0.4654,
+0.35, 0.494975, -0.35, 0.625, 0.75, 0.5021, 0.704, -0.5021,
+0.274993, 0.494975, -0.411556, 0.65625, 0.75, 0.3945, 0.704, -0.5904,
+0.323358, -0.388899, -0.483939, 0.65625, 0.3125, 0.463, -0.5528, -0.6929,
+0.35, -0.494975, -0.35, 0.625, 0.25, 0.5021, -0.704, -0.5021,
+0.274993, -0.494975, -0.411556, 0.65625, 0.25, 0.3945, -0.704, -0.5904,
+0.274993, 0.494975, -0.411556, 0.65625, 0.75, 0.3945, 0.704, -0.5904,
+0.411557, 0.388899, -0.411556, 0.625, 0.6875, 0.5893, 0.5528, -0.5893,
+0.323358, 0.388899, -0.483939, 0.65625, 0.6875, 0.463, 0.5528, -0.6929,
+0.274993, -0.494975, -0.411556, 0.65625, 0.25, 0.3945, -0.704, -0.5904,
+0.274993, -0.582029, -0.274993, 0.625, 0.1875, 0.3958, -0.8286, -0.3958,
+0.216061, -0.582029, -0.323358, 0.65625, 0.1875, 0.311, -0.8286, -0.4654,
+0.323358, 0.388899, -0.483939, 0.65625, 0.6875, 0.463, 0.5528, -0.6929,
+0.457297, 0.267878, -0.457297, 0.625, 0.625, 0.6539, 0.3805, -0.6539,
+0.359296, 0.267878, -0.537724, 0.65625, 0.625, 0.5137, 0.3805, -0.7689,
+0.216061, -0.582029, -0.323358, 0.65625, 0.1875, 0.311, -0.8286, -0.4654,
+0.189419, -0.646716, -0.189419, 0.625, 0.125, 0.2743, -0.9217, -0.2743,
+0.148825, -0.646716, -0.222733, 0.65625, 0.125, 0.2155, -0.9217, -0.3225,
+0.359296, 0.267878, -0.537724, 0.65625, 0.625, 0.5137, 0.3805, -0.7689,
+0.485464, 0.136563, -0.485464, 0.625, 0.5625, 0.6937, 0.1939, -0.6937,
+0.381427, 0.136563, -0.570845, 0.65625, 0.5625, 0.545, 0.1939, -0.8157,
+0.148825, -0.646716, -0.222733, 0.65625, 0.125, 0.2155, -0.9217, -0.3225,
+0.096565, -0.68655, -0.096565, 0.625, 0.0625, 0.1421, -0.9796, -0.1421,
+0.07587, -0.68655, -0.113548, 0.65625, 0.0625, 0.1116, -0.9796, -0.1671,
+0.388899, 0, -0.582029, 0.65625, 0.5, 0.5556, 0, -0.8314,
+0.485464, 0.136563, -0.485464, 0.625, 0.5625, 0.6937, 0.1939, -0.6937,
+0.494975, 0, -0.494975, 0.625, 0.5, 0.7071, 0, -0.7071,
+0.411557, 0.388899, -0.411556, 0.625, 0.6875, 0.5893, 0.5528, -0.5893,
+0.411557, 0.494975, -0.274993, 0.59375, 0.75, 0.5904, 0.704, -0.3945,
+0.483939, 0.388899, -0.323358, 0.59375, 0.6875, 0.6929, 0.5528, -0.463,
+0.274993, -0.582029, -0.274993, 0.625, 0.1875, 0.3958, -0.8286, -0.3958,
+0.411557, -0.494975, -0.274993, 0.59375, 0.25, 0.5904, -0.704, -0.3945,
+0.323358, -0.582029, -0.216061, 0.59375, 0.1875, 0.4654, -0.8286, -0.311,
+0.411557, 0.388899, -0.411556, 0.625, 0.6875, 0.5893, 0.5528, -0.5893,
+0.537725, 0.267878, -0.359296, 0.59375, 0.625, 0.7689, 0.3805, -0.5137,
+0.457297, 0.267878, -0.457297, 0.625, 0.625, 0.6539, 0.3805, -0.6539,
+0.189419, -0.646716, -0.189419, 0.625, 0.125, 0.2743, -0.9217, -0.2743,
+0.323358, -0.582029, -0.216061, 0.59375, 0.1875, 0.4654, -0.8286, -0.311,
+0.222733, -0.646716, -0.148825, 0.59375, 0.125, 0.3225, -0.9217, -0.2155,
+0.457297, 0.267878, -0.457297, 0.625, 0.625, 0.6539, 0.3805, -0.6539,
+0.570845, 0.136563, -0.381426, 0.59375, 0.5625, 0.8157, 0.1939, -0.545,
+0.485464, 0.136563, -0.485464, 0.625, 0.5625, 0.6937, 0.1939, -0.6937,
+0.189419, -0.646716, -0.189419, 0.625, 0.125, 0.2743, -0.9217, -0.2743,
+0.113548, -0.68655, -0.07587, 0.59375, 0.0625, 0.1671, -0.9796, -0.1116,
+0.096565, -0.68655, -0.096565, 0.625, 0.0625, 0.1421, -0.9796, -0.1421,
+0.494975, 0, -0.494975, 0.625, 0.5, 0.7071, 0, -0.7071,
+0.570845, 0.136563, -0.381426, 0.59375, 0.5625, 0.8157, 0.1939, -0.545,
+0.582029, 0, -0.388899, 0.59375, 0.5, 0.8314, 0, -0.5556,
+0.096565, 0.68655, -0.096565, 0.625, 0.9375, 0.1421, 0.9796, -0.1421,
+ 0, 0.7, 0, 0.609375, 1, 0, 1, 0,
+0.113548, 0.68655, -0.07587, 0.59375, 0.9375, 0.1671, 0.9796, -0.1116,
+ 0, -0.7, 0, 0.609375, 0, 0, -1, 0,
+0.096565, -0.68655, -0.096565, 0.625, 0.0625, 0.1421, -0.9796, -0.1421,
+0.113548, -0.68655, -0.07587, 0.59375, 0.0625, 0.1671, -0.9796, -0.1116,
+0.494975, 0, -0.494975, 0.625, 0.5, 0.7071, 0, -0.7071,
+0.570845, -0.136563, -0.381426, 0.59375, 0.4375, 0.8157, -0.1939, -0.545,
+0.485464, -0.136563, -0.485464, 0.625, 0.4375, 0.6937, -0.1939, -0.6937,
+0.096565, 0.68655, -0.096565, 0.625, 0.9375, 0.1421, 0.9796, -0.1421,
+0.222733, 0.646716, -0.148825, 0.59375, 0.875, 0.3225, 0.9217, -0.2155,
+0.189419, 0.646716, -0.189419, 0.625, 0.875, 0.2743, 0.9217, -0.2743,
+0.485464, -0.136563, -0.485464, 0.625, 0.4375, 0.6937, -0.1939, -0.6937,
+0.537725, -0.267878, -0.359296, 0.59375, 0.375, 0.7689, -0.3805, -0.5137,
+0.457297, -0.267878, -0.457297, 0.625, 0.375, 0.6539, -0.3805, -0.6539,
+0.189419, 0.646716, -0.189419, 0.625, 0.875, 0.2743, 0.9217, -0.2743,
+0.323358, 0.582029, -0.216061, 0.59375, 0.8125, 0.4654, 0.8286, -0.311,
+0.274993, 0.582029, -0.274993, 0.625, 0.8125, 0.3958, 0.8286, -0.3958,
+0.411557, -0.388899, -0.411556, 0.625, 0.3125, 0.5893, -0.5528, -0.5893,
+0.537725, -0.267878, -0.359296, 0.59375, 0.375, 0.7689, -0.3805, -0.5137,
+0.483939, -0.388899, -0.323358, 0.59375, 0.3125, 0.6929, -0.5528, -0.463,
+0.274993, 0.582029, -0.274993, 0.625, 0.8125, 0.3958, 0.8286, -0.3958,
+0.411557, 0.494975, -0.274993, 0.59375, 0.75, 0.5904, 0.704, -0.3945,
+0.35, 0.494975, -0.35, 0.625, 0.75, 0.5021, 0.704, -0.5021,
+0.411557, -0.388899, -0.411556, 0.625, 0.3125, 0.5893, -0.5528, -0.5893,
+0.411557, -0.494975, -0.274993, 0.59375, 0.25, 0.5904, -0.704, -0.3945,
+0.35, -0.494975, -0.35, 0.625, 0.25, 0.5021, -0.704, -0.5021,
+0.582029, 0, -0.388899, 0.59375, 0.5, 0.8314, 0, -0.5556,
+0.634289, -0.136563, -0.262731, 0.5625, 0.4375, 0.9063, -0.1939, -0.3754,
+0.570845, -0.136563, -0.381426, 0.59375, 0.4375, 0.8157, -0.1939, -0.545,
+0.113548, 0.68655, -0.07587, 0.59375, 0.9375, 0.1671, 0.9796, -0.1116,
+0.247488, 0.646716, -0.102512, 0.5625, 0.875, 0.3583, 0.9217, -0.1484,
+0.222733, 0.646716, -0.148825, 0.59375, 0.875, 0.3225, 0.9217, -0.2155,
+0.570845, -0.136563, -0.381426, 0.59375, 0.4375, 0.8157, -0.1939, -0.545,
+0.597487, -0.267878, -0.247487, 0.5625, 0.375, 0.8544, -0.3805, -0.3539,
+0.537725, -0.267878, -0.359296, 0.59375, 0.375, 0.7689, -0.3805, -0.5137,
+0.222733, 0.646716, -0.148825, 0.59375, 0.875, 0.3225, 0.9217, -0.2155,
+0.359296, 0.582029, -0.148825, 0.5625, 0.8125, 0.5171, 0.8286, -0.2142,
+0.323358, 0.582029, -0.216061, 0.59375, 0.8125, 0.4654, 0.8286, -0.311,
+0.483939, -0.388899, -0.323358, 0.59375, 0.3125, 0.6929, -0.5528, -0.463,
+0.597487, -0.267878, -0.247487, 0.5625, 0.375, 0.8544, -0.3805, -0.3539,
+0.537725, -0.388899, -0.222733, 0.5625, 0.3125, 0.7699, -0.5528, -0.3189,
+0.323358, 0.582029, -0.216061, 0.59375, 0.8125, 0.4654, 0.8286, -0.311,
+0.457297, 0.494975, -0.189418, 0.5625, 0.75, 0.6561, 0.704, -0.2717,
+0.411557, 0.494975, -0.274993, 0.59375, 0.75, 0.5904, 0.704, -0.3945,
+0.411557, -0.494975, -0.274993, 0.59375, 0.25, 0.5904, -0.704, -0.3945,
+0.537725, -0.388899, -0.222733, 0.5625, 0.3125, 0.7699, -0.5528, -0.3189,
+0.457297, -0.494975, -0.189418, 0.5625, 0.25, 0.6561, -0.704, -0.2717,
+0.483939, 0.388899, -0.323358, 0.59375, 0.6875, 0.6929, 0.5528, -0.463,
+0.457297, 0.494975, -0.189418, 0.5625, 0.75, 0.6561, 0.704, -0.2717,
+0.537725, 0.388899, -0.222733, 0.5625, 0.6875, 0.7699, 0.5528, -0.3189,
+0.411557, -0.494975, -0.274993, 0.59375, 0.25, 0.5904, -0.704, -0.3945,
+0.359296, -0.582029, -0.148825, 0.5625, 0.1875, 0.5171, -0.8286, -0.2142,
+0.323358, -0.582029, -0.216061, 0.59375, 0.1875, 0.4654, -0.8286, -0.311,
+0.483939, 0.388899, -0.323358, 0.59375, 0.6875, 0.6929, 0.5528, -0.463,
+0.597487, 0.267878, -0.247487, 0.5625, 0.625, 0.8544, 0.3805, -0.3539,
+0.537725, 0.267878, -0.359296, 0.59375, 0.625, 0.7689, 0.3805, -0.5137,
+0.222733, -0.646716, -0.148825, 0.59375, 0.125, 0.3225, -0.9217, -0.2155,
+0.359296, -0.582029, -0.148825, 0.5625, 0.1875, 0.5171, -0.8286, -0.2142,
+0.247487, -0.646716, -0.102512, 0.5625, 0.125, 0.3583, -0.9217, -0.1484,
+0.570845, 0.136563, -0.381426, 0.59375, 0.5625, 0.8157, 0.1939, -0.545,
+0.597487, 0.267878, -0.247487, 0.5625, 0.625, 0.8544, 0.3805, -0.3539,
+0.634289, 0.136563, -0.262731, 0.5625, 0.5625, 0.9063, 0.1939, -0.3754,
+0.222733, -0.646716, -0.148825, 0.59375, 0.125, 0.3225, -0.9217, -0.2155,
+0.126168, -0.68655, -0.05226, 0.5625, 0.0625, 0.1856, -0.9796, -0.0769,
+0.113548, -0.68655, -0.07587, 0.59375, 0.0625, 0.1671, -0.9796, -0.1116,
+0.570845, 0.136563, -0.381426, 0.59375, 0.5625, 0.8157, 0.1939, -0.545,
+0.646716, 0, -0.267878, 0.5625, 0.5, 0.9239, 0, -0.3827,
+0.582029, 0, -0.388899, 0.59375, 0.5, 0.8314, 0, -0.5556,
+0.113548, 0.68655, -0.07587, 0.59375, 0.9375, 0.1671, 0.9796, -0.1116,
+ 0, 0.7, 0, 0.578125, 1, 0, 1, 0,
+0.126168, 0.68655, -0.05226, 0.5625, 0.9375, 0.1856, 0.9796, -0.0769,
+ 0, -0.7, 0, 0.578125, 0, 0, -1, 0,
+0.113548, -0.68655, -0.07587, 0.59375, 0.0625, 0.1671, -0.9796, -0.1116,
+0.126168, -0.68655, -0.05226, 0.5625, 0.0625, 0.1856, -0.9796, -0.0769,
+0.457297, -0.494975, -0.189418, 0.5625, 0.25, 0.6561, -0.704, -0.2717,
+0.381427, -0.582029, -0.07587, 0.53125, 0.1875, 0.549, -0.8286, -0.1092,
+0.359296, -0.582029, -0.148825, 0.5625, 0.1875, 0.5171, -0.8286, -0.2142,
+0.537725, 0.388899, -0.222733, 0.5625, 0.6875, 0.7699, 0.5528, -0.3189,
+0.634289, 0.267878, -0.126168, 0.53125, 0.625, 0.907, 0.3805, -0.1804,
+0.597487, 0.267878, -0.247487, 0.5625, 0.625, 0.8544, 0.3805, -0.3539,
+0.359296, -0.582029, -0.148825, 0.5625, 0.1875, 0.5171, -0.8286, -0.2142,
+0.262731, -0.646716, -0.05226, 0.53125, 0.125, 0.3804, -0.9217, -0.0757,
+0.247487, -0.646716, -0.102512, 0.5625, 0.125, 0.3583, -0.9217, -0.1484,
+0.634289, 0.136563, -0.262731, 0.5625, 0.5625, 0.9063, 0.1939, -0.3754,
+0.634289, 0.267878, -0.126168, 0.53125, 0.625, 0.907, 0.3805, -0.1804,
+0.673358, 0.136563, -0.133939, 0.53125, 0.5625, 0.9622, 0.1939, -0.1914,
+0.126168, -0.68655, -0.05226, 0.5625, 0.0625, 0.1856, -0.9796, -0.0769,
+0.262731, -0.646716, -0.05226, 0.53125, 0.125, 0.3804, -0.9217, -0.0757,
+0.133939, -0.68655, -0.026642, 0.53125, 0.0625, 0.1971, -0.9796, -0.0392,
+0.634289, 0.136563, -0.262731, 0.5625, 0.5625, 0.9063, 0.1939, -0.3754,
+0.68655, 0, -0.136563, 0.53125, 0.5, 0.9808, 0, -0.1951,
+0.646716, 0, -0.267878, 0.5625, 0.5, 0.9239, 0, -0.3827,
+0.126168, 0.68655, -0.05226, 0.5625, 0.9375, 0.1856, 0.9796, -0.0769,
+ 0, 0.7, 0, 0.546875, 1, 0, 1, 0,
+0.133939, 0.68655, -0.026642, 0.53125, 0.9375, 0.1971, 0.9796, -0.0392,
+ 0, -0.7, 0, 0.546875, 0, 0, -1, 0,
+0.126168, -0.68655, -0.05226, 0.5625, 0.0625, 0.1856, -0.9796, -0.0769,
+0.133939, -0.68655, -0.026642, 0.53125, 0.0625, 0.1971, -0.9796, -0.0392,
+0.646716, 0, -0.267878, 0.5625, 0.5, 0.9239, 0, -0.3827,
+0.673358, -0.136563, -0.133939, 0.53125, 0.4375, 0.9622, -0.1939, -0.1914,
+0.634289, -0.136563, -0.262731, 0.5625, 0.4375, 0.9063, -0.1939, -0.3754,
+0.126168, 0.68655, -0.05226, 0.5625, 0.9375, 0.1856, 0.9796, -0.0769,
+0.262731, 0.646716, -0.05226, 0.53125, 0.875, 0.3804, 0.9217, -0.0757,
+0.247488, 0.646716, -0.102512, 0.5625, 0.875, 0.3583, 0.9217, -0.1484,
+0.634289, -0.136563, -0.262731, 0.5625, 0.4375, 0.9063, -0.1939, -0.3754,
+0.634289, -0.267878, -0.126168, 0.53125, 0.375, 0.907, -0.3805, -0.1804,
+0.597487, -0.267878, -0.247487, 0.5625, 0.375, 0.8544, -0.3805, -0.3539,
+0.247488, 0.646716, -0.102512, 0.5625, 0.875, 0.3583, 0.9217, -0.1484,
+0.381427, 0.582029, -0.07587, 0.53125, 0.8125, 0.549, 0.8286, -0.1092,
+0.359296, 0.582029, -0.148825, 0.5625, 0.8125, 0.5171, 0.8286, -0.2142,
+0.537725, -0.388899, -0.222733, 0.5625, 0.3125, 0.7699, -0.5528, -0.3189,
+0.634289, -0.267878, -0.126168, 0.53125, 0.375, 0.907, -0.3805, -0.1804,
+0.570845, -0.388899, -0.113548, 0.53125, 0.3125, 0.8173, -0.5528, -0.1626,
+0.457297, 0.494975, -0.189418, 0.5625, 0.75, 0.6561, 0.704, -0.2717,
+0.381427, 0.582029, -0.07587, 0.53125, 0.8125, 0.549, 0.8286, -0.1092,
+0.485464, 0.494975, -0.096565, 0.53125, 0.75, 0.6965, 0.704, -0.1385,
+0.457297, -0.494975, -0.189418, 0.5625, 0.25, 0.6561, -0.704, -0.2717,
+0.570845, -0.388899, -0.113548, 0.53125, 0.3125, 0.8173, -0.5528, -0.1626,
+0.485464, -0.494975, -0.096565, 0.53125, 0.25, 0.6965, -0.704, -0.1385,
+0.457297, 0.494975, -0.189418, 0.5625, 0.75, 0.6561, 0.704, -0.2717,
+0.570845, 0.388899, -0.113548, 0.53125, 0.6875, 0.8173, 0.5528, -0.1626,
+0.537725, 0.388899, -0.222733, 0.5625, 0.6875, 0.7699, 0.5528, -0.3189,
+0.133939, 0.68655, -0.026642, 0.53125, 0.9375, 0.1971, 0.9796, -0.0392,
+0.267879, 0.646716, 0, 0.5, 0.875, 0.3879, 0.9217, 0,
+0.262731, 0.646716, -0.05226, 0.53125, 0.875, 0.3804, 0.9217, -0.0757,
+0.673358, -0.136563, -0.133939, 0.53125, 0.4375, 0.9622, -0.1939, -0.1914,
+0.646716, -0.267878, 0, 0.5, 0.375, 0.9247, -0.3805, 0,
+0.634289, -0.267878, -0.126168, 0.53125, 0.375, 0.907, -0.3805, -0.1804,
+0.262731, 0.646716, -0.05226, 0.53125, 0.875, 0.3804, 0.9217, -0.0757,
+0.388899, 0.582029, 0, 0.5, 0.8125, 0.5598, 0.8286, 0,
+0.381427, 0.582029, -0.07587, 0.53125, 0.8125, 0.549, 0.8286, -0.1092,
+0.570845, -0.388899, -0.113548, 0.53125, 0.3125, 0.8173, -0.5528, -0.1626,
+0.646716, -0.267878, 0, 0.5, 0.375, 0.9247, -0.3805, 0,
+0.582029, -0.388899, 0, 0.5, 0.3125, 0.8333, -0.5528, 0,
+0.381427, 0.582029, -0.07587, 0.53125, 0.8125, 0.549, 0.8286, -0.1092,
+0.494975, 0.494975, 0, 0.5, 0.75, 0.7101, 0.704, 0,
+0.485464, 0.494975, -0.096565, 0.53125, 0.75, 0.6965, 0.704, -0.1385,
+0.570845, -0.388899, -0.113548, 0.53125, 0.3125, 0.8173, -0.5528, -0.1626,
+0.494975, -0.494975, 0, 0.5, 0.25, 0.7101, -0.704, 0,
+0.485464, -0.494975, -0.096565, 0.53125, 0.25, 0.6965, -0.704, -0.1385,
+0.485464, 0.494975, -0.096565, 0.53125, 0.75, 0.6965, 0.704, -0.1385,
+0.582029, 0.388899, 0, 0.5, 0.6875, 0.8333, 0.5528, 0,
+0.570845, 0.388899, -0.113548, 0.53125, 0.6875, 0.8173, 0.5528, -0.1626,
+0.381427, -0.582029, -0.07587, 0.53125, 0.1875, 0.549, -0.8286, -0.1092,
+0.494975, -0.494975, 0, 0.5, 0.25, 0.7101, -0.704, 0,
+0.388899, -0.582029, 0, 0.5, 0.1875, 0.5598, -0.8286, 0,
+0.570845, 0.388899, -0.113548, 0.53125, 0.6875, 0.8173, 0.5528, -0.1626,
+0.646716, 0.267878, 0, 0.5, 0.625, 0.9247, 0.3805, 0,
+0.634289, 0.267878, -0.126168, 0.53125, 0.625, 0.907, 0.3805, -0.1804,
+0.262731, -0.646716, -0.05226, 0.53125, 0.125, 0.3804, -0.9217, -0.0757,
+0.388899, -0.582029, 0, 0.5, 0.1875, 0.5598, -0.8286, 0,
+0.267878, -0.646716, 0, 0.5, 0.125, 0.3879, -0.9217, 0,
+0.673358, 0.136563, -0.133939, 0.53125, 0.5625, 0.9622, 0.1939, -0.1914,
+0.646716, 0.267878, 0, 0.5, 0.625, 0.9247, 0.3805, 0,
+0.68655, 0.136563, 0, 0.5, 0.5625, 0.981, 0.1939, 0,
+0.133939, -0.68655, -0.026642, 0.53125, 0.0625, 0.1971, -0.9796, -0.0392,
+0.267878, -0.646716, 0, 0.5, 0.125, 0.3879, -0.9217, 0,
+0.136563, -0.68655, 0, 0.5, 0.0625, 0.201, -0.9796, 0,
+0.673358, 0.136563, -0.133939, 0.53125, 0.5625, 0.9622, 0.1939, -0.1914,
+0.7, 0, 0, 0.5, 0.5, 1, 0, 0,
+0.68655, 0, -0.136563, 0.53125, 0.5, 0.9808, 0, -0.1951,
+0.133939, 0.68655, -0.026642, 0.53125, 0.9375, 0.1971, 0.9796, -0.0392,
+ 0, 0.7, 0, 0.515625, 1, 0, 1, 0,
+0.136563, 0.68655, 0, 0.5, 0.9375, 0.201, 0.9796, 0,
+ 0, -0.7, 0, 0.515625, 0, 0, -1, 0,
+0.133939, -0.68655, -0.026642, 0.53125, 0.0625, 0.1971, -0.9796, -0.0392,
+0.136563, -0.68655, 0, 0.5, 0.0625, 0.201, -0.9796, 0,
+0.673358, -0.136563, -0.133939, 0.53125, 0.4375, 0.9622, -0.1939, -0.1914,
+0.7, 0, 0, 0.5, 0.5, 1, 0, 0,
+0.68655, -0.136563, 0, 0.5, 0.4375, 0.981, -0.1939, 0,
+0.582029, 0.388899, 0, 0.5, 0.6875, 0.8333, 0.5528, 0,
+0.634289, 0.267878, 0.126168, 0.46875, 0.625, 0.907, 0.3805, 0.1804,
+0.646716, 0.267878, 0, 0.5, 0.625, 0.9247, 0.3805, 0,
+0.388899, -0.582029, 0, 0.5, 0.1875, 0.5598, -0.8286, 0,
+0.262731, -0.646716, 0.052261, 0.46875, 0.125, 0.3804, -0.9217, 0.0757,
+0.267878, -0.646716, 0, 0.5, 0.125, 0.3879, -0.9217, 0,
+0.68655, 0.136563, 0, 0.5, 0.5625, 0.981, 0.1939, 0,
+0.634289, 0.267878, 0.126168, 0.46875, 0.625, 0.907, 0.3805, 0.1804,
+0.673358, 0.136563, 0.133939, 0.46875, 0.5625, 0.9622, 0.1939, 0.1914,
+0.136563, -0.68655, 0, 0.5, 0.0625, 0.201, -0.9796, 0,
+0.262731, -0.646716, 0.052261, 0.46875, 0.125, 0.3804, -0.9217, 0.0757,
+0.133939, -0.68655, 0.026642, 0.46875, 0.0625, 0.1971, -0.9796, 0.0392,
+0.68655, 0.136563, 0, 0.5, 0.5625, 0.981, 0.1939, 0,
+0.68655, 0, 0.136564, 0.46875, 0.5, 0.9808, 0, 0.1951,
+0.7, 0, 0, 0.5, 0.5, 1, 0, 0,
+0.136563, 0.68655, 0, 0.5, 0.9375, 0.201, 0.9796, 0,
+ 0, 0.7, 0, 0.484374, 1, 0, 1, 0,
+0.133939, 0.68655, 0.026642, 0.46875, 0.9375, 0.1971, 0.9796, 0.0392,
+ 0, -0.7, 0, 0.484375, 0, 0, -1, 0,
+0.136563, -0.68655, 0, 0.5, 0.0625, 0.201, -0.9796, 0,
+0.133939, -0.68655, 0.026642, 0.46875, 0.0625, 0.1971, -0.9796, 0.0392,
+0.7, 0, 0, 0.5, 0.5, 1, 0, 0,
+0.673358, -0.136563, 0.133939, 0.46875, 0.4375, 0.9622, -0.1939, 0.1914,
+0.68655, -0.136563, 0, 0.5, 0.4375, 0.981, -0.1939, 0,
+0.267879, 0.646716, 0, 0.5, 0.875, 0.3879, 0.9217, 0,
+0.133939, 0.68655, 0.026642, 0.46875, 0.9375, 0.1971, 0.9796, 0.0392,
+0.262731, 0.646716, 0.052261, 0.46875, 0.875, 0.3804, 0.9217, 0.0757,
+0.68655, -0.136563, 0, 0.5, 0.4375, 0.981, -0.1939, 0,
+0.634289, -0.267878, 0.126168, 0.46875, 0.375, 0.907, -0.3805, 0.1804,
+0.646716, -0.267878, 0, 0.5, 0.375, 0.9247, -0.3805, 0,
+0.267879, 0.646716, 0, 0.5, 0.875, 0.3879, 0.9217, 0,
+0.381427, 0.582029, 0.075871, 0.46875, 0.8125, 0.549, 0.8286, 0.1092,
+0.388899, 0.582029, 0, 0.5, 0.8125, 0.5598, 0.8286, 0,
+0.582029, -0.388899, 0, 0.5, 0.3125, 0.8333, -0.5528, 0,
+0.634289, -0.267878, 0.126168, 0.46875, 0.375, 0.907, -0.3805, 0.1804,
+0.570845, -0.388899, 0.113548, 0.46875, 0.3125, 0.8173, -0.5528, 0.1626,
+0.388899, 0.582029, 0, 0.5, 0.8125, 0.5598, 0.8286, 0,
+0.485464, 0.494975, 0.096565, 0.46875, 0.75, 0.6965, 0.704, 0.1385,
+0.494975, 0.494975, 0, 0.5, 0.75, 0.7101, 0.704, 0,
+0.582029, -0.388899, 0, 0.5, 0.3125, 0.8333, -0.5528, 0,
+0.485464, -0.494975, 0.096565, 0.46875, 0.25, 0.6965, -0.704, 0.1385,
+0.494975, -0.494975, 0, 0.5, 0.25, 0.7101, -0.704, 0,
+0.582029, 0.388899, 0, 0.5, 0.6875, 0.8333, 0.5528, 0,
+0.485464, 0.494975, 0.096565, 0.46875, 0.75, 0.6965, 0.704, 0.1385,
+0.570845, 0.388899, 0.113548, 0.46875, 0.6875, 0.8173, 0.5528, 0.1626,
+0.388899, -0.582029, 0, 0.5, 0.1875, 0.5598, -0.8286, 0,
+0.485464, -0.494975, 0.096565, 0.46875, 0.25, 0.6965, -0.704, 0.1385,
+0.381427, -0.582029, 0.075871, 0.46875, 0.1875, 0.549, -0.8286, 0.1092,
+0.673358, -0.136563, 0.133939, 0.46875, 0.4375, 0.9622, -0.1939, 0.1914,
+0.597487, -0.267878, 0.247488, 0.4375, 0.375, 0.8544, -0.3805, 0.3539,
+0.634289, -0.267878, 0.126168, 0.46875, 0.375, 0.907, -0.3805, 0.1804,
+0.381427, 0.582029, 0.075871, 0.46875, 0.8125, 0.549, 0.8286, 0.1092,
+0.247488, 0.646716, 0.102513, 0.4375, 0.875, 0.3583, 0.9217, 0.1484,
+0.359296, 0.582029, 0.148826, 0.4375, 0.8125, 0.5171, 0.8286, 0.2142,
+0.570845, -0.388899, 0.113548, 0.46875, 0.3125, 0.8173, -0.5528, 0.1626,
+0.597487, -0.267878, 0.247488, 0.4375, 0.375, 0.8544, -0.3805, 0.3539,
+0.537724, -0.388899, 0.222733, 0.4375, 0.3125, 0.7699, -0.5528, 0.3189,
+0.381427, 0.582029, 0.075871, 0.46875, 0.8125, 0.549, 0.8286, 0.1092,
+0.457297, 0.494975, 0.189419, 0.4375, 0.75, 0.6561, 0.704, 0.2717,
+0.485464, 0.494975, 0.096565, 0.46875, 0.75, 0.6965, 0.704, 0.1385,
+0.570845, -0.388899, 0.113548, 0.46875, 0.3125, 0.8173, -0.5528, 0.1626,
+0.457297, -0.494975, 0.189419, 0.4375, 0.25, 0.6561, -0.704, 0.2717,
+0.485464, -0.494975, 0.096565, 0.46875, 0.25, 0.6965, -0.704, 0.1385,
+0.485464, 0.494975, 0.096565, 0.46875, 0.75, 0.6965, 0.704, 0.1385,
+0.537724, 0.388899, 0.222733, 0.4375, 0.6875, 0.7699, 0.5528, 0.3189,
+0.570845, 0.388899, 0.113548, 0.46875, 0.6875, 0.8173, 0.5528, 0.1626,
+0.485464, -0.494975, 0.096565, 0.46875, 0.25, 0.6965, -0.704, 0.1385,
+0.359296, -0.582029, 0.148826, 0.4375, 0.1875, 0.5171, -0.8286, 0.2142,
+0.381427, -0.582029, 0.075871, 0.46875, 0.1875, 0.549, -0.8286, 0.1092,
+0.570845, 0.388899, 0.113548, 0.46875, 0.6875, 0.8173, 0.5528, 0.1626,
+0.597487, 0.267878, 0.247488, 0.4375, 0.625, 0.8544, 0.3805, 0.3539,
+0.634289, 0.267878, 0.126168, 0.46875, 0.625, 0.907, 0.3805, 0.1804,
+0.262731, -0.646716, 0.052261, 0.46875, 0.125, 0.3804, -0.9217, 0.0757,
+0.359296, -0.582029, 0.148826, 0.4375, 0.1875, 0.5171, -0.8286, 0.2142,
+0.247487, -0.646716, 0.102513, 0.4375, 0.125, 0.3583, -0.9217, 0.1484,
+0.673358, 0.136563, 0.133939, 0.46875, 0.5625, 0.9622, 0.1939, 0.1914,
+0.597487, 0.267878, 0.247488, 0.4375, 0.625, 0.8544, 0.3805, 0.3539,
+0.634289, 0.136563, 0.262731, 0.4375, 0.5625, 0.9063, 0.1939, 0.3754,
+0.262731, -0.646716, 0.052261, 0.46875, 0.125, 0.3804, -0.9217, 0.0757,
+0.126168, -0.68655, 0.052261, 0.4375, 0.0625, 0.1856, -0.9796, 0.0769,
+0.133939, -0.68655, 0.026642, 0.46875, 0.0625, 0.1971, -0.9796, 0.0392,
+0.673358, 0.136563, 0.133939, 0.46875, 0.5625, 0.9622, 0.1939, 0.1914,
+0.646716, 0, 0.267879, 0.4375, 0.5, 0.9239, 0, 0.3827,
+0.68655, 0, 0.136564, 0.46875, 0.5, 0.9808, 0, 0.1951,
+0.133939, 0.68655, 0.026642, 0.46875, 0.9375, 0.1971, 0.9796, 0.0392,
+ 0, 0.7, 0, 0.453124, 1, 0, 1, 0,
+0.126168, 0.68655, 0.052261, 0.4375, 0.9375, 0.1856, 0.9796, 0.0769,
+ 0, -0.7, 0, 0.453125, 0, 0, -1, 0,
+0.133939, -0.68655, 0.026642, 0.46875, 0.0625, 0.1971, -0.9796, 0.0392,
+0.126168, -0.68655, 0.052261, 0.4375, 0.0625, 0.1856, -0.9796, 0.0769,
+0.68655, 0, 0.136564, 0.46875, 0.5, 0.9808, 0, 0.1951,
+0.634289, -0.136563, 0.262731, 0.4375, 0.4375, 0.9063, -0.1939, 0.3754,
+0.673358, -0.136563, 0.133939, 0.46875, 0.4375, 0.9622, -0.1939, 0.1914,
+0.133939, 0.68655, 0.026642, 0.46875, 0.9375, 0.1971, 0.9796, 0.0392,
+0.247488, 0.646716, 0.102513, 0.4375, 0.875, 0.3583, 0.9217, 0.1484,
+0.262731, 0.646716, 0.052261, 0.46875, 0.875, 0.3804, 0.9217, 0.0757,
+0.359296, -0.582029, 0.148826, 0.4375, 0.1875, 0.5171, -0.8286, 0.2142,
+0.222733, -0.646716, 0.148826, 0.40625, 0.125, 0.3225, -0.9217, 0.2155,
+0.247487, -0.646716, 0.102513, 0.4375, 0.125, 0.3583, -0.9217, 0.1484,
+0.634289, 0.136563, 0.262731, 0.4375, 0.5625, 0.9063, 0.1939, 0.3754,
+0.537724, 0.267878, 0.359296, 0.40625, 0.625, 0.7689, 0.3805, 0.5137,
+0.570845, 0.136563, 0.381427, 0.40625, 0.5625, 0.8157, 0.1939, 0.545,
+0.247487, -0.646716, 0.102513, 0.4375, 0.125, 0.3583, -0.9217, 0.1484,
+0.113548, -0.68655, 0.075871, 0.40625, 0.0625, 0.1671, -0.9796, 0.1116,
+0.126168, -0.68655, 0.052261, 0.4375, 0.0625, 0.1856, -0.9796, 0.0769,
+0.634289, 0.136563, 0.262731, 0.4375, 0.5625, 0.9063, 0.1939, 0.3754,
+0.582029, 0, 0.388899, 0.40625, 0.5, 0.8314, 0, 0.5556,
+0.646716, 0, 0.267879, 0.4375, 0.5, 0.9239, 0, 0.3827,
+0.126168, 0.68655, 0.052261, 0.4375, 0.9375, 0.1856, 0.9796, 0.0769,
+ 0, 0.7, 0, 0.421874, 1, 0, 1, 0,
+0.113548, 0.68655, 0.075871, 0.40625, 0.9375, 0.1671, 0.9796, 0.1116,
+ 0, -0.7, 0, 0.421875, 0, 0, -1, 0,
+0.126168, -0.68655, 0.052261, 0.4375, 0.0625, 0.1856, -0.9796, 0.0769,
+0.113548, -0.68655, 0.075871, 0.40625, 0.0625, 0.1671, -0.9796, 0.1116,
+0.634289, -0.136563, 0.262731, 0.4375, 0.4375, 0.9063, -0.1939, 0.3754,
+0.582029, 0, 0.388899, 0.40625, 0.5, 0.8314, 0, 0.5556,
+0.570845, -0.136563, 0.381427, 0.40625, 0.4375, 0.8157, -0.1939, 0.545,
+0.126168, 0.68655, 0.052261, 0.4375, 0.9375, 0.1856, 0.9796, 0.0769,
+0.222733, 0.646716, 0.148826, 0.40625, 0.875, 0.3225, 0.9217, 0.2155,
+0.247488, 0.646716, 0.102513, 0.4375, 0.875, 0.3583, 0.9217, 0.1484,
+0.634289, -0.136563, 0.262731, 0.4375, 0.4375, 0.9063, -0.1939, 0.3754,
+0.537724, -0.267878, 0.359296, 0.40625, 0.375, 0.7689, -0.3805, 0.5137,
+0.597487, -0.267878, 0.247488, 0.4375, 0.375, 0.8544, -0.3805, 0.3539,
+0.247488, 0.646716, 0.102513, 0.4375, 0.875, 0.3583, 0.9217, 0.1484,
+0.323358, 0.582029, 0.216061, 0.40625, 0.8125, 0.4654, 0.8286, 0.311,
+0.359296, 0.582029, 0.148826, 0.4375, 0.8125, 0.5171, 0.8286, 0.2142,
+0.537724, -0.388899, 0.222733, 0.4375, 0.3125, 0.7699, -0.5528, 0.3189,
+0.537724, -0.267878, 0.359296, 0.40625, 0.375, 0.7689, -0.3805, 0.5137,
+0.483939, -0.388899, 0.323358, 0.40625, 0.3125, 0.6929, -0.5528, 0.463,
+0.359296, 0.582029, 0.148826, 0.4375, 0.8125, 0.5171, 0.8286, 0.2142,
+0.411557, 0.494975, 0.274993, 0.40625, 0.75, 0.5904, 0.704, 0.3945,
+0.457297, 0.494975, 0.189419, 0.4375, 0.75, 0.6561, 0.704, 0.2717,
+0.537724, -0.388899, 0.222733, 0.4375, 0.3125, 0.7699, -0.5528, 0.3189,
+0.411557, -0.494975, 0.274993, 0.40625, 0.25, 0.5904, -0.704, 0.3945,
+0.457297, -0.494975, 0.189419, 0.4375, 0.25, 0.6561, -0.704, 0.2717,
+0.537724, 0.388899, 0.222733, 0.4375, 0.6875, 0.7699, 0.5528, 0.3189,
+0.411557, 0.494975, 0.274993, 0.40625, 0.75, 0.5904, 0.704, 0.3945,
+0.483939, 0.388899, 0.323358, 0.40625, 0.6875, 0.6929, 0.5528, 0.463,
+0.359296, -0.582029, 0.148826, 0.4375, 0.1875, 0.5171, -0.8286, 0.2142,
+0.411557, -0.494975, 0.274993, 0.40625, 0.25, 0.5904, -0.704, 0.3945,
+0.323358, -0.582029, 0.216061, 0.40625, 0.1875, 0.4654, -0.8286, 0.311,
+0.537724, 0.388899, 0.222733, 0.4375, 0.6875, 0.7699, 0.5528, 0.3189,
+0.537724, 0.267878, 0.359296, 0.40625, 0.625, 0.7689, 0.3805, 0.5137,
+0.597487, 0.267878, 0.247488, 0.4375, 0.625, 0.8544, 0.3805, 0.3539,
+0.537724, -0.267878, 0.359296, 0.40625, 0.375, 0.7689, -0.3805, 0.5137,
+0.411556, -0.388899, 0.411557, 0.375, 0.3125, 0.5893, -0.5528, 0.5893,
+0.483939, -0.388899, 0.323358, 0.40625, 0.3125, 0.6929, -0.5528, 0.463,
+0.323358, 0.582029, 0.216061, 0.40625, 0.8125, 0.4654, 0.8286, 0.311,
+0.35, 0.494975, 0.35, 0.375, 0.75, 0.5021, 0.704, 0.5021,
+0.411557, 0.494975, 0.274993, 0.40625, 0.75, 0.5904, 0.704, 0.3945,
+0.483939, -0.388899, 0.323358, 0.40625, 0.3125, 0.6929, -0.5528, 0.463,
+0.35, -0.494975, 0.35, 0.375, 0.25, 0.5021, -0.704, 0.5021,
+0.411557, -0.494975, 0.274993, 0.40625, 0.25, 0.5904, -0.704, 0.3945,
+0.411557, 0.494975, 0.274993, 0.40625, 0.75, 0.5904, 0.704, 0.3945,
+0.411556, 0.388899, 0.411557, 0.375, 0.6875, 0.5893, 0.5528, 0.5893,
+0.483939, 0.388899, 0.323358, 0.40625, 0.6875, 0.6929, 0.5528, 0.463,
+0.323358, -0.582029, 0.216061, 0.40625, 0.1875, 0.4654, -0.8286, 0.311,
+0.35, -0.494975, 0.35, 0.375, 0.25, 0.5021, -0.704, 0.5021,
+0.274993, -0.582029, 0.274993, 0.375, 0.1875, 0.3958, -0.8286, 0.3958,
+0.483939, 0.388899, 0.323358, 0.40625, 0.6875, 0.6929, 0.5528, 0.463,
+0.457297, 0.267878, 0.457297, 0.375, 0.625, 0.6539, 0.3805, 0.6539,
+0.537724, 0.267878, 0.359296, 0.40625, 0.625, 0.7689, 0.3805, 0.5137,
+0.323358, -0.582029, 0.216061, 0.40625, 0.1875, 0.4654, -0.8286, 0.311,
+0.189419, -0.646716, 0.189419, 0.375, 0.125, 0.2743, -0.9217, 0.2743,
+0.222733, -0.646716, 0.148826, 0.40625, 0.125, 0.3225, -0.9217, 0.2155,
+0.570845, 0.136563, 0.381427, 0.40625, 0.5625, 0.8157, 0.1939, 0.545,
+0.457297, 0.267878, 0.457297, 0.375, 0.625, 0.6539, 0.3805, 0.6539,
+0.485464, 0.136563, 0.485464, 0.375, 0.5625, 0.6937, 0.1939, 0.6937,
+0.113548, -0.68655, 0.075871, 0.40625, 0.0625, 0.1671, -0.9796, 0.1116,
+0.189419, -0.646716, 0.189419, 0.375, 0.125, 0.2743, -0.9217, 0.2743,
+0.096565, -0.68655, 0.096565, 0.375, 0.0625, 0.1421, -0.9796, 0.1421,
+0.570845, 0.136563, 0.381427, 0.40625, 0.5625, 0.8157, 0.1939, 0.545,
+0.494975, 0, 0.494975, 0.375, 0.5, 0.7071, 0, 0.7071,
+0.582029, 0, 0.388899, 0.40625, 0.5, 0.8314, 0, 0.5556,
+0.113548, 0.68655, 0.075871, 0.40625, 0.9375, 0.1671, 0.9796, 0.1116,
+ 0, 0.7, 0, 0.390625, 1, 0, 1, 0,
+0.096565, 0.68655, 0.096565, 0.375, 0.9375, 0.1421, 0.9796, 0.1421,
+ 0, -0.7, 0, 0.390625, 0, 0, -1, 0,
+0.113548, -0.68655, 0.075871, 0.40625, 0.0625, 0.1671, -0.9796, 0.1116,
+0.096565, -0.68655, 0.096565, 0.375, 0.0625, 0.1421, -0.9796, 0.1421,
+0.582029, 0, 0.388899, 0.40625, 0.5, 0.8314, 0, 0.5556,
+0.485464, -0.136563, 0.485464, 0.375, 0.4375, 0.6937, -0.1939, 0.6937,
+0.570845, -0.136563, 0.381427, 0.40625, 0.4375, 0.8157, -0.1939, 0.545,
+0.113548, 0.68655, 0.075871, 0.40625, 0.9375, 0.1671, 0.9796, 0.1116,
+0.189419, 0.646716, 0.189419, 0.375, 0.875, 0.2743, 0.9217, 0.2743,
+0.222733, 0.646716, 0.148826, 0.40625, 0.875, 0.3225, 0.9217, 0.2155,
+0.570845, -0.136563, 0.381427, 0.40625, 0.4375, 0.8157, -0.1939, 0.545,
+0.457297, -0.267878, 0.457297, 0.375, 0.375, 0.6539, -0.3805, 0.6539,
+0.537724, -0.267878, 0.359296, 0.40625, 0.375, 0.7689, -0.3805, 0.5137,
+0.222733, 0.646716, 0.148826, 0.40625, 0.875, 0.3225, 0.9217, 0.2155,
+0.274993, 0.582029, 0.274994, 0.375, 0.8125, 0.3958, 0.8286, 0.3958,
+0.323358, 0.582029, 0.216061, 0.40625, 0.8125, 0.4654, 0.8286, 0.311,
+0.096565, -0.68655, 0.096565, 0.375, 0.0625, 0.1421, -0.9796, 0.1421,
+0.148825, -0.646716, 0.222733, 0.34375, 0.125, 0.2155, -0.9217, 0.3225,
+0.07587, -0.68655, 0.113548, 0.34375, 0.0625, 0.1116, -0.9796, 0.1671,
+0.485464, 0.136563, 0.485464, 0.375, 0.5625, 0.6937, 0.1939, 0.6937,
+0.388899, 0, 0.582029, 0.34375, 0.5, 0.5556, 0, 0.8314,
+0.494975, 0, 0.494975, 0.375, 0.5, 0.7071, 0, 0.7071,
+0.096565, 0.68655, 0.096565, 0.375, 0.9375, 0.1421, 0.9796, 0.1421,
+ 0, 0.7, 0, 0.359375, 1, 0, 1, 0,
+0.075871, 0.68655, 0.113549, 0.34375, 0.9375, 0.1116, 0.9796, 0.1671,
+ 0, -0.7, 0, 0.359375, 0, 0, -1, 0,
+0.096565, -0.68655, 0.096565, 0.375, 0.0625, 0.1421, -0.9796, 0.1421,
+0.07587, -0.68655, 0.113548, 0.34375, 0.0625, 0.1116, -0.9796, 0.1671,
+0.485464, -0.136563, 0.485464, 0.375, 0.4375, 0.6937, -0.1939, 0.6937,
+0.388899, 0, 0.582029, 0.34375, 0.5, 0.5556, 0, 0.8314,
+0.381426, -0.136563, 0.570845, 0.34375, 0.4375, 0.545, -0.1939, 0.8157,
+0.096565, 0.68655, 0.096565, 0.375, 0.9375, 0.1421, 0.9796, 0.1421,
+0.148825, 0.646716, 0.222733, 0.34375, 0.875, 0.2155, 0.9217, 0.3225,
+0.189419, 0.646716, 0.189419, 0.375, 0.875, 0.2743, 0.9217, 0.2743,
+0.485464, -0.136563, 0.485464, 0.375, 0.4375, 0.6937, -0.1939, 0.6937,
+0.359296, -0.267878, 0.537725, 0.34375, 0.375, 0.5137, -0.3805, 0.7689,
+0.457297, -0.267878, 0.457297, 0.375, 0.375, 0.6539, -0.3805, 0.6539,
+0.189419, 0.646716, 0.189419, 0.375, 0.875, 0.2743, 0.9217, 0.2743,
+0.216061, 0.582029, 0.323358, 0.34375, 0.8125, 0.311, 0.8286, 0.4654,
+0.274993, 0.582029, 0.274994, 0.375, 0.8125, 0.3958, 0.8286, 0.3958,
+0.411556, -0.388899, 0.411557, 0.375, 0.3125, 0.5893, -0.5528, 0.5893,
+0.359296, -0.267878, 0.537725, 0.34375, 0.375, 0.5137, -0.3805, 0.7689,
+0.323358, -0.388899, 0.483939, 0.34375, 0.3125, 0.463, -0.5528, 0.6929,
+0.35, 0.494975, 0.35, 0.375, 0.75, 0.5021, 0.704, 0.5021,
+0.216061, 0.582029, 0.323358, 0.34375, 0.8125, 0.311, 0.8286, 0.4654,
+0.274993, 0.494975, 0.411557, 0.34375, 0.75, 0.3945, 0.704, 0.5904,
+0.411556, -0.388899, 0.411557, 0.375, 0.3125, 0.5893, -0.5528, 0.5893,
+0.274993, -0.494975, 0.411557, 0.34375, 0.25, 0.3945, -0.704, 0.5904,
+0.35, -0.494975, 0.35, 0.375, 0.25, 0.5021, -0.704, 0.5021,
+0.411556, 0.388899, 0.411557, 0.375, 0.6875, 0.5893, 0.5528, 0.5893,
+0.274993, 0.494975, 0.411557, 0.34375, 0.75, 0.3945, 0.704, 0.5904,
+0.323358, 0.388899, 0.483939, 0.34375, 0.6875, 0.463, 0.5528, 0.6929,
+0.274993, -0.582029, 0.274993, 0.375, 0.1875, 0.3958, -0.8286, 0.3958,
+0.274993, -0.494975, 0.411557, 0.34375, 0.25, 0.3945, -0.704, 0.5904,
+0.216061, -0.582029, 0.323358, 0.34375, 0.1875, 0.311, -0.8286, 0.4654,
+0.411556, 0.388899, 0.411557, 0.375, 0.6875, 0.5893, 0.5528, 0.5893,
+0.359296, 0.267878, 0.537725, 0.34375, 0.625, 0.5137, 0.3805, 0.7689,
+0.457297, 0.267878, 0.457297, 0.375, 0.625, 0.6539, 0.3805, 0.6539,
+0.274993, -0.582029, 0.274993, 0.375, 0.1875, 0.3958, -0.8286, 0.3958,
+0.148825, -0.646716, 0.222733, 0.34375, 0.125, 0.2155, -0.9217, 0.3225,
+0.189419, -0.646716, 0.189419, 0.375, 0.125, 0.2743, -0.9217, 0.2743,
+0.485464, 0.136563, 0.485464, 0.375, 0.5625, 0.6937, 0.1939, 0.6937,
+0.359296, 0.267878, 0.537725, 0.34375, 0.625, 0.5137, 0.3805, 0.7689,
+0.381426, 0.136563, 0.570845, 0.34375, 0.5625, 0.545, 0.1939, 0.8157,
+0.216061, 0.582029, 0.323358, 0.34375, 0.8125, 0.311, 0.8286, 0.4654,
+0.189419, 0.494975, 0.457297, 0.3125, 0.75, 0.2717, 0.704, 0.6561,
+0.274993, 0.494975, 0.411557, 0.34375, 0.75, 0.3945, 0.704, 0.5904,
+0.323358, -0.388899, 0.483939, 0.34375, 0.3125, 0.463, -0.5528, 0.6929,
+0.189419, -0.494975, 0.457297, 0.3125, 0.25, 0.2717, -0.704, 0.6561,
+0.274993, -0.494975, 0.411557, 0.34375, 0.25, 0.3945, -0.704, 0.5904,
+0.274993, 0.494975, 0.411557, 0.34375, 0.75, 0.3945, 0.704, 0.5904,
+0.222733, 0.388899, 0.537725, 0.3125, 0.6875, 0.3189, 0.5528, 0.7699,
+0.323358, 0.388899, 0.483939, 0.34375, 0.6875, 0.463, 0.5528, 0.6929,
+0.216061, -0.582029, 0.323358, 0.34375, 0.1875, 0.311, -0.8286, 0.4654,
+0.189419, -0.494975, 0.457297, 0.3125, 0.25, 0.2717, -0.704, 0.6561,
+0.148825, -0.582029, 0.359296, 0.3125, 0.1875, 0.2142, -0.8286, 0.5171,
+0.323358, 0.388899, 0.483939, 0.34375, 0.6875, 0.463, 0.5528, 0.6929,
+0.247487, 0.267878, 0.597488, 0.3125, 0.625, 0.3539, 0.3805, 0.8544,
+0.359296, 0.267878, 0.537725, 0.34375, 0.625, 0.5137, 0.3805, 0.7689,
+0.216061, -0.582029, 0.323358, 0.34375, 0.1875, 0.311, -0.8286, 0.4654,
+0.102513, -0.646716, 0.247488, 0.3125, 0.125, 0.1484, -0.9217, 0.3583,
+0.148825, -0.646716, 0.222733, 0.34375, 0.125, 0.2155, -0.9217, 0.3225,
+0.381426, 0.136563, 0.570845, 0.34375, 0.5625, 0.545, 0.1939, 0.8157,
+0.247487, 0.267878, 0.597488, 0.3125, 0.625, 0.3539, 0.3805, 0.8544,
+0.262731, 0.136563, 0.634289, 0.3125, 0.5625, 0.3754, 0.1939, 0.9063,
+0.148825, -0.646716, 0.222733, 0.34375, 0.125, 0.2155, -0.9217, 0.3225,
+0.05226, -0.68655, 0.126168, 0.3125, 0.0625, 0.0769, -0.9796, 0.1856,
+0.07587, -0.68655, 0.113548, 0.34375, 0.0625, 0.1116, -0.9796, 0.1671,
+0.381426, 0.136563, 0.570845, 0.34375, 0.5625, 0.545, 0.1939, 0.8157,
+0.267878, 0, 0.646716, 0.3125, 0.5, 0.3827, 0, 0.9239,
+0.388899, 0, 0.582029, 0.34375, 0.5, 0.5556, 0, 0.8314,
+0.075871, 0.68655, 0.113549, 0.34375, 0.9375, 0.1116, 0.9796, 0.1671,
+ 0, 0.7, 0, 0.328125, 1, 0, 1, 0,
+0.052261, 0.68655, 0.126168, 0.3125, 0.9375, 0.0769, 0.9796, 0.1856,
+ 0, -0.7, 0, 0.328125, 0, 0, -1, 0,
+0.07587, -0.68655, 0.113548, 0.34375, 0.0625, 0.1116, -0.9796, 0.1671,
+0.05226, -0.68655, 0.126168, 0.3125, 0.0625, 0.0769, -0.9796, 0.1856,
+0.388899, 0, 0.582029, 0.34375, 0.5, 0.5556, 0, 0.8314,
+0.262731, -0.136563, 0.634289, 0.3125, 0.4375, 0.3754, -0.1939, 0.9063,
+0.381426, -0.136563, 0.570845, 0.34375, 0.4375, 0.545, -0.1939, 0.8157,
+0.075871, 0.68655, 0.113549, 0.34375, 0.9375, 0.1116, 0.9796, 0.1671,
+0.102513, 0.646716, 0.247488, 0.3125, 0.875, 0.1484, 0.9217, 0.3583,
+0.148825, 0.646716, 0.222733, 0.34375, 0.875, 0.2155, 0.9217, 0.3225,
+0.381426, -0.136563, 0.570845, 0.34375, 0.4375, 0.545, -0.1939, 0.8157,
+0.247487, -0.267878, 0.597488, 0.3125, 0.375, 0.3539, -0.3805, 0.8544,
+0.359296, -0.267878, 0.537725, 0.34375, 0.375, 0.5137, -0.3805, 0.7689,
+0.216061, 0.582029, 0.323358, 0.34375, 0.8125, 0.311, 0.8286, 0.4654,
+0.102513, 0.646716, 0.247488, 0.3125, 0.875, 0.1484, 0.9217, 0.3583,
+0.148825, 0.582029, 0.359296, 0.3125, 0.8125, 0.2142, 0.8286, 0.5171,
+0.323358, -0.388899, 0.483939, 0.34375, 0.3125, 0.463, -0.5528, 0.6929,
+0.247487, -0.267878, 0.597488, 0.3125, 0.375, 0.3539, -0.3805, 0.8544,
+0.222733, -0.388899, 0.537725, 0.3125, 0.3125, 0.3189, -0.5528, 0.7699,
+0.262731, 0.136563, 0.634289, 0.3125, 0.5625, 0.3754, 0.1939, 0.9063,
+0.136563, 0, 0.68655, 0.28125, 0.5, 0.1951, 0, 0.9808,
+0.267878, 0, 0.646716, 0.3125, 0.5, 0.3827, 0, 0.9239,
+0.052261, 0.68655, 0.126168, 0.3125, 0.9375, 0.0769, 0.9796, 0.1856,
+ 0, 0.7, 0, 0.296875, 1, 0, 1, 0,
+0.026642, 0.68655, 0.13394, 0.28125, 0.9375, 0.0392, 0.9796, 0.1971,
+ 0, -0.7, 0, 0.296875, 0, 0, -1, 0,
+0.05226, -0.68655, 0.126168, 0.3125, 0.0625, 0.0769, -0.9796, 0.1856,
+0.026642, -0.68655, 0.133939, 0.28125, 0.0625, 0.0392, -0.9796, 0.1971,
+0.267878, 0, 0.646716, 0.3125, 0.5, 0.3827, 0, 0.9239,
+0.133939, -0.136563, 0.673358, 0.28125, 0.4375, 0.1914, -0.1939, 0.9622,
+0.262731, -0.136563, 0.634289, 0.3125, 0.4375, 0.3754, -0.1939, 0.9063,
+0.052261, 0.68655, 0.126168, 0.3125, 0.9375, 0.0769, 0.9796, 0.1856,
+0.052261, 0.646716, 0.262731, 0.28125, 0.875, 0.0757, 0.9217, 0.3804,
+0.102513, 0.646716, 0.247488, 0.3125, 0.875, 0.1484, 0.9217, 0.3583,
+0.262731, -0.136563, 0.634289, 0.3125, 0.4375, 0.3754, -0.1939, 0.9063,
+0.126168, -0.267878, 0.634289, 0.28125, 0.375, 0.1804, -0.3805, 0.907,
+0.247487, -0.267878, 0.597488, 0.3125, 0.375, 0.3539, -0.3805, 0.8544,
+0.102513, 0.646716, 0.247488, 0.3125, 0.875, 0.1484, 0.9217, 0.3583,
+0.07587, 0.582029, 0.381427, 0.28125, 0.8125, 0.1092, 0.8286, 0.549,
+0.148825, 0.582029, 0.359296, 0.3125, 0.8125, 0.2142, 0.8286, 0.5171,
+0.222733, -0.388899, 0.537725, 0.3125, 0.3125, 0.3189, -0.5528, 0.7699,
+0.126168, -0.267878, 0.634289, 0.28125, 0.375, 0.1804, -0.3805, 0.907,
+0.113548, -0.388899, 0.570845, 0.28125, 0.3125, 0.1626, -0.5528, 0.8173,
+0.148825, 0.582029, 0.359296, 0.3125, 0.8125, 0.2142, 0.8286, 0.5171,
+0.096565, 0.494975, 0.485464, 0.28125, 0.75, 0.1385, 0.704, 0.6965,
+0.189419, 0.494975, 0.457297, 0.3125, 0.75, 0.2717, 0.704, 0.6561,
+0.222733, -0.388899, 0.537725, 0.3125, 0.3125, 0.3189, -0.5528, 0.7699,
+0.096565, -0.494975, 0.485464, 0.28125, 0.25, 0.1385, -0.704, 0.6965,
+0.189419, -0.494975, 0.457297, 0.3125, 0.25, 0.2717, -0.704, 0.6561,
+0.189419, 0.494975, 0.457297, 0.3125, 0.75, 0.2717, 0.704, 0.6561,
+0.113548, 0.388899, 0.570845, 0.28125, 0.6875, 0.1626, 0.5528, 0.8173,
+0.222733, 0.388899, 0.537725, 0.3125, 0.6875, 0.3189, 0.5528, 0.7699,
+0.189419, -0.494975, 0.457297, 0.3125, 0.25, 0.2717, -0.704, 0.6561,
+0.07587, -0.582029, 0.381427, 0.28125, 0.1875, 0.1092, -0.8286, 0.549,
+0.148825, -0.582029, 0.359296, 0.3125, 0.1875, 0.2142, -0.8286, 0.5171,
+0.222733, 0.388899, 0.537725, 0.3125, 0.6875, 0.3189, 0.5528, 0.7699,
+0.126168, 0.267878, 0.634289, 0.28125, 0.625, 0.1804, 0.3805, 0.907,
+0.247487, 0.267878, 0.597488, 0.3125, 0.625, 0.3539, 0.3805, 0.8544,
+0.148825, -0.582029, 0.359296, 0.3125, 0.1875, 0.2142, -0.8286, 0.5171,
+0.05226, -0.646716, 0.262731, 0.28125, 0.125, 0.0757, -0.9217, 0.3804,
+0.102513, -0.646716, 0.247488, 0.3125, 0.125, 0.1484, -0.9217, 0.3583,
+0.262731, 0.136563, 0.634289, 0.3125, 0.5625, 0.3754, 0.1939, 0.9063,
+0.126168, 0.267878, 0.634289, 0.28125, 0.625, 0.1804, 0.3805, 0.907,
+0.133939, 0.136563, 0.673358, 0.28125, 0.5625, 0.1914, 0.1939, 0.9622,
+0.05226, -0.68655, 0.126168, 0.3125, 0.0625, 0.0769, -0.9796, 0.1856,
+0.05226, -0.646716, 0.262731, 0.28125, 0.125, 0.0757, -0.9217, 0.3804,
+0.026642, -0.68655, 0.133939, 0.28125, 0.0625, 0.0392, -0.9796, 0.1971,
+0.113548, -0.388899, 0.570845, 0.28125, 0.3125, 0.1626, -0.5528, 0.8173,
+ 0, -0.494975, 0.494975, 0.25, 0.25, 0, -0.704, 0.7101,
+0.096565, -0.494975, 0.485464, 0.28125, 0.25, 0.1385, -0.704, 0.6965,
+0.096565, 0.494975, 0.485464, 0.28125, 0.75, 0.1385, 0.704, 0.6965,
+ 0, 0.388899, 0.582029, 0.25, 0.6875, 0, 0.5528, 0.8333,
+0.113548, 0.388899, 0.570845, 0.28125, 0.6875, 0.1626, 0.5528, 0.8173,
+0.07587, -0.582029, 0.381427, 0.28125, 0.1875, 0.1092, -0.8286, 0.549,
+ 0, -0.494975, 0.494975, 0.25, 0.25, 0, -0.704, 0.7101,
+ 0, -0.582029, 0.388899, 0.25, 0.1875, 0, -0.8286, 0.5598,
+0.113548, 0.388899, 0.570845, 0.28125, 0.6875, 0.1626, 0.5528, 0.8173,
+ 0, 0.267878, 0.646716, 0.25, 0.625, 0, 0.3805, 0.9247,
+0.126168, 0.267878, 0.634289, 0.28125, 0.625, 0.1804, 0.3805, 0.907,
+0.07587, -0.582029, 0.381427, 0.28125, 0.1875, 0.1092, -0.8286, 0.549,
+ 0, -0.646716, 0.267879, 0.25, 0.125, 0, -0.9217, 0.3879,
+0.05226, -0.646716, 0.262731, 0.28125, 0.125, 0.0757, -0.9217, 0.3804,
+0.133939, 0.136563, 0.673358, 0.28125, 0.5625, 0.1914, 0.1939, 0.9622,
+ 0, 0.267878, 0.646716, 0.25, 0.625, 0, 0.3805, 0.9247,
+ 0, 0.136563, 0.68655, 0.25, 0.5625, 0, 0.1939, 0.981,
+0.026642, -0.68655, 0.133939, 0.28125, 0.0625, 0.0392, -0.9796, 0.1971,
+ 0, -0.646716, 0.267879, 0.25, 0.125, 0, -0.9217, 0.3879,
+ 0, -0.68655, 0.136563, 0.25, 0.0625, 0, -0.9796, 0.201,
+0.133939, 0.136563, 0.673358, 0.28125, 0.5625, 0.1914, 0.1939, 0.9622,
+ 0, 0, 0.7, 0.25, 0.5, 0, 0, 1,
+0.136563, 0, 0.68655, 0.28125, 0.5, 0.1951, 0, 0.9808,
+0.026642, 0.68655, 0.13394, 0.28125, 0.9375, 0.0392, 0.9796, 0.1971,
+ 0, 0.7, 0, 0.265625, 1, 0, 1, 0,
+ 0, 0.68655, 0.136564, 0.25, 0.9375, 0, 0.9796, 0.201,
+ 0, -0.7, 0, 0.265625, 0, 0, -1, 0,
+0.026642, -0.68655, 0.133939, 0.28125, 0.0625, 0.0392, -0.9796, 0.1971,
+ 0, -0.68655, 0.136563, 0.25, 0.0625, 0, -0.9796, 0.201,
+0.136563, 0, 0.68655, 0.28125, 0.5, 0.1951, 0, 0.9808,
+ 0, -0.136563, 0.68655, 0.25, 0.4375, 0, -0.1939, 0.981,
+0.133939, -0.136563, 0.673358, 0.28125, 0.4375, 0.1914, -0.1939, 0.9622,
+0.026642, 0.68655, 0.13394, 0.28125, 0.9375, 0.0392, 0.9796, 0.1971,
+ 0, 0.646716, 0.267879, 0.25, 0.875, 0, 0.9217, 0.3879,
+0.052261, 0.646716, 0.262731, 0.28125, 0.875, 0.0757, 0.9217, 0.3804,
+0.133939, -0.136563, 0.673358, 0.28125, 0.4375, 0.1914, -0.1939, 0.9622,
+ 0, -0.267878, 0.646716, 0.25, 0.375, 0, -0.3805, 0.9247,
+0.126168, -0.267878, 0.634289, 0.28125, 0.375, 0.1804, -0.3805, 0.907,
+0.07587, 0.582029, 0.381427, 0.28125, 0.8125, 0.1092, 0.8286, 0.549,
+ 0, 0.646716, 0.267879, 0.25, 0.875, 0, 0.9217, 0.3879,
+ 0, 0.582029, 0.388899, 0.25, 0.8125, 0, 0.8286, 0.5598,
+0.113548, -0.388899, 0.570845, 0.28125, 0.3125, 0.1626, -0.5528, 0.8173,
+ 0, -0.267878, 0.646716, 0.25, 0.375, 0, -0.3805, 0.9247,
+ 0, -0.388899, 0.582029, 0.25, 0.3125, 0, -0.5528, 0.8333,
+0.096565, 0.494975, 0.485464, 0.28125, 0.75, 0.1385, 0.704, 0.6965,
+ 0, 0.582029, 0.388899, 0.25, 0.8125, 0, 0.8286, 0.5598,
+ 0, 0.494975, 0.494975, 0.25, 0.75, 0, 0.704, 0.7101,
+ 0, 0.68655, 0.136564, 0.25, 0.9375, 0, 0.9796, 0.201,
+ 0, 0.7, 0, 0.234375, 1, 0, 1, 0,
+-0.026642, 0.68655, 0.13394, 0.21875, 0.9375, -0.0392, 0.9796, 0.1971,
+ 0, -0.7, 0, 0.234375, 0, 0, -1, 0,
+ 0, -0.68655, 0.136563, 0.25, 0.0625, 0, -0.9796, 0.201,
+-0.026642, -0.68655, 0.133939, 0.21875, 0.0625, -0.0392, -0.9796, 0.1971,
+ 0, 0, 0.7, 0.25, 0.5, 0, 0, 1,
+-0.133939, -0.136563, 0.673358, 0.21875, 0.4375, -0.1914, -0.1939, 0.9622,
+ 0, -0.136563, 0.68655, 0.25, 0.4375, 0, -0.1939, 0.981,
+ 0, 0.68655, 0.136564, 0.25, 0.9375, 0, 0.9796, 0.201,
+-0.05226, 0.646716, 0.262731, 0.21875, 0.875, -0.0757, 0.9217, 0.3804,
+ 0, 0.646716, 0.267879, 0.25, 0.875, 0, 0.9217, 0.3879,
+ 0, -0.136563, 0.68655, 0.25, 0.4375, 0, -0.1939, 0.981,
+-0.126168, -0.267878, 0.634289, 0.21875, 0.375, -0.1804, -0.3805, 0.907,
+ 0, -0.267878, 0.646716, 0.25, 0.375, 0, -0.3805, 0.9247,
+ 0, 0.646716, 0.267879, 0.25, 0.875, 0, 0.9217, 0.3879,
+-0.07587, 0.582029, 0.381427, 0.21875, 0.8125, -0.1092, 0.8286, 0.549,
+ 0, 0.582029, 0.388899, 0.25, 0.8125, 0, 0.8286, 0.5598,
+ 0, -0.388899, 0.582029, 0.25, 0.3125, 0, -0.5528, 0.8333,
+-0.126168, -0.267878, 0.634289, 0.21875, 0.375, -0.1804, -0.3805, 0.907,
+-0.113548, -0.388899, 0.570845, 0.21875, 0.3125, -0.1626, -0.5528, 0.8173,
+ 0, 0.494975, 0.494975, 0.25, 0.75, 0, 0.704, 0.7101,
+-0.07587, 0.582029, 0.381427, 0.21875, 0.8125, -0.1092, 0.8286, 0.549,
+-0.096565, 0.494975, 0.485464, 0.21875, 0.75, -0.1385, 0.704, 0.6965,
+ 0, -0.388899, 0.582029, 0.25, 0.3125, 0, -0.5528, 0.8333,
+-0.096565, -0.494975, 0.485464, 0.21875, 0.25, -0.1385, -0.704, 0.6965,
+ 0, -0.494975, 0.494975, 0.25, 0.25, 0, -0.704, 0.7101,
+ 0, 0.388899, 0.582029, 0.25, 0.6875, 0, 0.5528, 0.8333,
+-0.096565, 0.494975, 0.485464, 0.21875, 0.75, -0.1385, 0.704, 0.6965,
+-0.113548, 0.388899, 0.570845, 0.21875, 0.6875, -0.1626, 0.5528, 0.8173,
+ 0, -0.494975, 0.494975, 0.25, 0.25, 0, -0.704, 0.7101,
+-0.07587, -0.582029, 0.381427, 0.21875, 0.1875, -0.1092, -0.8286, 0.549,
+ 0, -0.582029, 0.388899, 0.25, 0.1875, 0, -0.8286, 0.5598,
+ 0, 0.388899, 0.582029, 0.25, 0.6875, 0, 0.5528, 0.8333,
+-0.126168, 0.267878, 0.634289, 0.21875, 0.625, -0.1804, 0.3805, 0.907,
+ 0, 0.267878, 0.646716, 0.25, 0.625, 0, 0.3805, 0.9247,
+ 0, -0.582029, 0.388899, 0.25, 0.1875, 0, -0.8286, 0.5598,
+-0.05226, -0.646716, 0.262731, 0.21875, 0.125, -0.0757, -0.9217, 0.3804,
+ 0, -0.646716, 0.267879, 0.25, 0.125, 0, -0.9217, 0.3879,
+ 0, 0.136563, 0.68655, 0.25, 0.5625, 0, 0.1939, 0.981,
+-0.126168, 0.267878, 0.634289, 0.21875, 0.625, -0.1804, 0.3805, 0.907,
+-0.133939, 0.136563, 0.673358, 0.21875, 0.5625, -0.1914, 0.1939, 0.9622,
+ 0, -0.646716, 0.267879, 0.25, 0.125, 0, -0.9217, 0.3879,
+-0.026642, -0.68655, 0.133939, 0.21875, 0.0625, -0.0392, -0.9796, 0.1971,
+ 0, -0.68655, 0.136563, 0.25, 0.0625, 0, -0.9796, 0.201,
+ 0, 0.136563, 0.68655, 0.25, 0.5625, 0, 0.1939, 0.981,
+-0.136563, 0, 0.68655, 0.21875, 0.5, -0.1951, 0, 0.9808,
+ 0, 0, 0.7, 0.25, 0.5, 0, 0, 1,
+-0.113548, 0.388899, 0.570845, 0.21875, 0.6875, -0.1626, 0.5528, 0.8173,
+-0.189419, 0.494975, 0.457297, 0.1875, 0.75, -0.2717, 0.704, 0.6561,
+-0.222733, 0.388899, 0.537724, 0.1875, 0.6875, -0.3189, 0.5528, 0.7699,
+-0.096565, -0.494975, 0.485464, 0.21875, 0.25, -0.1385, -0.704, 0.6965,
+-0.148825, -0.582029, 0.359296, 0.1875, 0.1875, -0.2142, -0.8286, 0.5171,
+-0.07587, -0.582029, 0.381427, 0.21875, 0.1875, -0.1092, -0.8286, 0.549,
+-0.113548, 0.388899, 0.570845, 0.21875, 0.6875, -0.1626, 0.5528, 0.8173,
+-0.247487, 0.267878, 0.597488, 0.1875, 0.625, -0.3539, 0.3805, 0.8544,
+-0.126168, 0.267878, 0.634289, 0.21875, 0.625, -0.1804, 0.3805, 0.907,
+-0.05226, -0.646716, 0.262731, 0.21875, 0.125, -0.0757, -0.9217, 0.3804,
+-0.148825, -0.582029, 0.359296, 0.1875, 0.1875, -0.2142, -0.8286, 0.5171,
+-0.102513, -0.646716, 0.247488, 0.1875, 0.125, -0.1484, -0.9217, 0.3583,
+-0.133939, 0.136563, 0.673358, 0.21875, 0.5625, -0.1914, 0.1939, 0.9622,
+-0.247487, 0.267878, 0.597488, 0.1875, 0.625, -0.3539, 0.3805, 0.8544,
+-0.262731, 0.136563, 0.634289, 0.1875, 0.5625, -0.3754, 0.1939, 0.9063,
+-0.026642, -0.68655, 0.133939, 0.21875, 0.0625, -0.0392, -0.9796, 0.1971,
+-0.102513, -0.646716, 0.247488, 0.1875, 0.125, -0.1484, -0.9217, 0.3583,
+-0.05226, -0.68655, 0.126168, 0.1875, 0.0625, -0.0769, -0.9796, 0.1856,
+-0.133939, 0.136563, 0.673358, 0.21875, 0.5625, -0.1914, 0.1939, 0.9622,
+-0.267879, 0, 0.646716, 0.1875, 0.5, -0.3827, 0, 0.9239,
+-0.136563, 0, 0.68655, 0.21875, 0.5, -0.1951, 0, 0.9808,
+-0.026642, 0.68655, 0.13394, 0.21875, 0.9375, -0.0392, 0.9796, 0.1971,
+ 0, 0.7, 0, 0.203125, 1, 0, 1, 0,
+-0.052261, 0.68655, 0.126168, 0.1875, 0.9375, -0.0769, 0.9796, 0.1856,
+ 0, -0.7, 0, 0.203125, 0, 0, -1, 0,
+-0.026642, -0.68655, 0.133939, 0.21875, 0.0625, -0.0392, -0.9796, 0.1971,
+-0.05226, -0.68655, 0.126168, 0.1875, 0.0625, -0.0769, -0.9796, 0.1856,
+-0.133939, -0.136563, 0.673358, 0.21875, 0.4375, -0.1914, -0.1939, 0.9622,
+-0.267879, 0, 0.646716, 0.1875, 0.5, -0.3827, 0, 0.9239,
+-0.262731, -0.136563, 0.634289, 0.1875, 0.4375, -0.3754, -0.1939, 0.9063,
+-0.026642, 0.68655, 0.13394, 0.21875, 0.9375, -0.0392, 0.9796, 0.1971,
+-0.102513, 0.646716, 0.247488, 0.1875, 0.875, -0.1484, 0.9217, 0.3583,
+-0.05226, 0.646716, 0.262731, 0.21875, 0.875, -0.0757, 0.9217, 0.3804,
+-0.133939, -0.136563, 0.673358, 0.21875, 0.4375, -0.1914, -0.1939, 0.9622,
+-0.247487, -0.267878, 0.597488, 0.1875, 0.375, -0.3539, -0.3805, 0.8544,
+-0.126168, -0.267878, 0.634289, 0.21875, 0.375, -0.1804, -0.3805, 0.907,
+-0.05226, 0.646716, 0.262731, 0.21875, 0.875, -0.0757, 0.9217, 0.3804,
+-0.148825, 0.582029, 0.359296, 0.1875, 0.8125, -0.2142, 0.8286, 0.5171,
+-0.07587, 0.582029, 0.381427, 0.21875, 0.8125, -0.1092, 0.8286, 0.549,
+-0.113548, -0.388899, 0.570845, 0.21875, 0.3125, -0.1626, -0.5528, 0.8173,
+-0.247487, -0.267878, 0.597488, 0.1875, 0.375, -0.3539, -0.3805, 0.8544,
+-0.222733, -0.388899, 0.537724, 0.1875, 0.3125, -0.3189, -0.5528, 0.7699,
+-0.096565, 0.494975, 0.485464, 0.21875, 0.75, -0.1385, 0.704, 0.6965,
+-0.148825, 0.582029, 0.359296, 0.1875, 0.8125, -0.2142, 0.8286, 0.5171,
+-0.189419, 0.494975, 0.457297, 0.1875, 0.75, -0.2717, 0.704, 0.6561,
+-0.113548, -0.388899, 0.570845, 0.21875, 0.3125, -0.1626, -0.5528, 0.8173,
+-0.189419, -0.494975, 0.457297, 0.1875, 0.25, -0.2717, -0.704, 0.6561,
+-0.096565, -0.494975, 0.485464, 0.21875, 0.25, -0.1385, -0.704, 0.6965,
+-0.267879, 0, 0.646716, 0.1875, 0.5, -0.3827, 0, 0.9239,
+-0.381427, -0.136563, 0.570845, 0.15625, 0.4375, -0.545, -0.1939, 0.8157,
+-0.262731, -0.136563, 0.634289, 0.1875, 0.4375, -0.3754, -0.1939, 0.9063,
+-0.052261, 0.68655, 0.126168, 0.1875, 0.9375, -0.0769, 0.9796, 0.1856,
+-0.148825, 0.646716, 0.222733, 0.15625, 0.875, -0.2155, 0.9217, 0.3225,
+-0.102513, 0.646716, 0.247488, 0.1875, 0.875, -0.1484, 0.9217, 0.3583,
+-0.262731, -0.136563, 0.634289, 0.1875, 0.4375, -0.3754, -0.1939, 0.9063,
+-0.359296, -0.267878, 0.537725, 0.15625, 0.375, -0.5137, -0.3805, 0.7689,
+-0.247487, -0.267878, 0.597488, 0.1875, 0.375, -0.3539, -0.3805, 0.8544,
+-0.102513, 0.646716, 0.247488, 0.1875, 0.875, -0.1484, 0.9217, 0.3583,
+-0.216061, 0.582029, 0.323358, 0.15625, 0.8125, -0.311, 0.8286, 0.4654,
+-0.148825, 0.582029, 0.359296, 0.1875, 0.8125, -0.2142, 0.8286, 0.5171,
+-0.222733, -0.388899, 0.537724, 0.1875, 0.3125, -0.3189, -0.5528, 0.7699,
+-0.359296, -0.267878, 0.537725, 0.15625, 0.375, -0.5137, -0.3805, 0.7689,
+-0.323358, -0.388899, 0.483939, 0.15625, 0.3125, -0.463, -0.5528, 0.6929,
+-0.148825, 0.582029, 0.359296, 0.1875, 0.8125, -0.2142, 0.8286, 0.5171,
+-0.274993, 0.494975, 0.411557, 0.15625, 0.75, -0.3945, 0.704, 0.5904,
+-0.189419, 0.494975, 0.457297, 0.1875, 0.75, -0.2717, 0.704, 0.6561,
+-0.222733, -0.388899, 0.537724, 0.1875, 0.3125, -0.3189, -0.5528, 0.7699,
+-0.274993, -0.494975, 0.411557, 0.15625, 0.25, -0.3945, -0.704, 0.5904,
+-0.189419, -0.494975, 0.457297, 0.1875, 0.25, -0.2717, -0.704, 0.6561,
+-0.222733, 0.388899, 0.537724, 0.1875, 0.6875, -0.3189, 0.5528, 0.7699,
+-0.274993, 0.494975, 0.411557, 0.15625, 0.75, -0.3945, 0.704, 0.5904,
+-0.323358, 0.388899, 0.483939, 0.15625, 0.6875, -0.463, 0.5528, 0.6929,
+-0.148825, -0.582029, 0.359296, 0.1875, 0.1875, -0.2142, -0.8286, 0.5171,
+-0.274993, -0.494975, 0.411557, 0.15625, 0.25, -0.3945, -0.704, 0.5904,
+-0.216061, -0.582029, 0.323358, 0.15625, 0.1875, -0.311, -0.8286, 0.4654,
+-0.222733, 0.388899, 0.537724, 0.1875, 0.6875, -0.3189, 0.5528, 0.7699,
+-0.359296, 0.267878, 0.537725, 0.15625, 0.625, -0.5137, 0.3805, 0.7689,
+-0.247487, 0.267878, 0.597488, 0.1875, 0.625, -0.3539, 0.3805, 0.8544,
+-0.148825, -0.582029, 0.359296, 0.1875, 0.1875, -0.2142, -0.8286, 0.5171,
+-0.148825, -0.646716, 0.222733, 0.15625, 0.125, -0.2155, -0.9217, 0.3225,
+-0.102513, -0.646716, 0.247488, 0.1875, 0.125, -0.1484, -0.9217, 0.3583,
+-0.262731, 0.136563, 0.634289, 0.1875, 0.5625, -0.3754, 0.1939, 0.9063,
+-0.359296, 0.267878, 0.537725, 0.15625, 0.625, -0.5137, 0.3805, 0.7689,
+-0.381427, 0.136563, 0.570845, 0.15625, 0.5625, -0.545, 0.1939, 0.8157,
+-0.05226, -0.68655, 0.126168, 0.1875, 0.0625, -0.0769, -0.9796, 0.1856,
+-0.148825, -0.646716, 0.222733, 0.15625, 0.125, -0.2155, -0.9217, 0.3225,
+-0.07587, -0.68655, 0.113548, 0.15625, 0.0625, -0.1116, -0.9796, 0.1671,
+-0.262731, 0.136563, 0.634289, 0.1875, 0.5625, -0.3754, 0.1939, 0.9063,
+-0.388899, 0, 0.582029, 0.15625, 0.5, -0.5556, 0, 0.8314,
+-0.267879, 0, 0.646716, 0.1875, 0.5, -0.3827, 0, 0.9239,
+-0.052261, 0.68655, 0.126168, 0.1875, 0.9375, -0.0769, 0.9796, 0.1856,
+ 0, 0.7, 0, 0.171875, 1, 0, 1, 0,
+-0.075871, 0.68655, 0.113548, 0.15625, 0.9375, -0.1116, 0.9796, 0.1671,
+ 0, -0.7, 0, 0.171875, 0, 0, -1, 0,
+-0.05226, -0.68655, 0.126168, 0.1875, 0.0625, -0.0769, -0.9796, 0.1856,
+-0.07587, -0.68655, 0.113548, 0.15625, 0.0625, -0.1116, -0.9796, 0.1671,
+-0.274993, -0.494975, 0.411557, 0.15625, 0.25, -0.3945, -0.704, 0.5904,
+-0.274993, -0.582029, 0.274993, 0.125, 0.1875, -0.3958, -0.8286, 0.3958,
+-0.216061, -0.582029, 0.323358, 0.15625, 0.1875, -0.311, -0.8286, 0.4654,
+-0.323358, 0.388899, 0.483939, 0.15625, 0.6875, -0.463, 0.5528, 0.6929,
+-0.457297, 0.267878, 0.457297, 0.125, 0.625, -0.6539, 0.3805, 0.6539,
+-0.359296, 0.267878, 0.537725, 0.15625, 0.625, -0.5137, 0.3805, 0.7689,
+-0.216061, -0.582029, 0.323358, 0.15625, 0.1875, -0.311, -0.8286, 0.4654,
+-0.189419, -0.646716, 0.189419, 0.125, 0.125, -0.2743, -0.9217, 0.2743,
+-0.148825, -0.646716, 0.222733, 0.15625, 0.125, -0.2155, -0.9217, 0.3225,
+-0.381427, 0.136563, 0.570845, 0.15625, 0.5625, -0.545, 0.1939, 0.8157,
+-0.457297, 0.267878, 0.457297, 0.125, 0.625, -0.6539, 0.3805, 0.6539,
+-0.485464, 0.136563, 0.485464, 0.125, 0.5625, -0.6937, 0.1939, 0.6937,
+-0.148825, -0.646716, 0.222733, 0.15625, 0.125, -0.2155, -0.9217, 0.3225,
+-0.096565, -0.68655, 0.096565, 0.125, 0.0625, -0.1421, -0.9796, 0.1421,
+-0.07587, -0.68655, 0.113548, 0.15625, 0.0625, -0.1116, -0.9796, 0.1671,
+-0.388899, 0, 0.582029, 0.15625, 0.5, -0.5556, 0, 0.8314,
+-0.485464, 0.136563, 0.485464, 0.125, 0.5625, -0.6937, 0.1939, 0.6937,
+-0.494975, 0, 0.494975, 0.125, 0.5, -0.7071, 0, 0.7071,
+-0.075871, 0.68655, 0.113548, 0.15625, 0.9375, -0.1116, 0.9796, 0.1671,
+ 0, 0.7, 0, 0.140625, 1, 0, 1, 0,
+-0.096565, 0.68655, 0.096565, 0.125, 0.9375, -0.1421, 0.9796, 0.1421,
+ 0, -0.7, 0, 0.140625, 0, 0, -1, 0,
+-0.07587, -0.68655, 0.113548, 0.15625, 0.0625, -0.1116, -0.9796, 0.1671,
+-0.096565, -0.68655, 0.096565, 0.125, 0.0625, -0.1421, -0.9796, 0.1421,
+-0.388899, 0, 0.582029, 0.15625, 0.5, -0.5556, 0, 0.8314,
+-0.485464, -0.136563, 0.485464, 0.125, 0.4375, -0.6937, -0.1939, 0.6937,
+-0.381427, -0.136563, 0.570845, 0.15625, 0.4375, -0.545, -0.1939, 0.8157,
+-0.075871, 0.68655, 0.113548, 0.15625, 0.9375, -0.1116, 0.9796, 0.1671,
+-0.189419, 0.646716, 0.189419, 0.125, 0.875, -0.2743, 0.9217, 0.2743,
+-0.148825, 0.646716, 0.222733, 0.15625, 0.875, -0.2155, 0.9217, 0.3225,
+-0.381427, -0.136563, 0.570845, 0.15625, 0.4375, -0.545, -0.1939, 0.8157,
+-0.457297, -0.267878, 0.457297, 0.125, 0.375, -0.6539, -0.3805, 0.6539,
+-0.359296, -0.267878, 0.537725, 0.15625, 0.375, -0.5137, -0.3805, 0.7689,
+-0.148825, 0.646716, 0.222733, 0.15625, 0.875, -0.2155, 0.9217, 0.3225,
+-0.274993, 0.582029, 0.274994, 0.125, 0.8125, -0.3958, 0.8286, 0.3958,
+-0.216061, 0.582029, 0.323358, 0.15625, 0.8125, -0.311, 0.8286, 0.4654,
+-0.323358, -0.388899, 0.483939, 0.15625, 0.3125, -0.463, -0.5528, 0.6929,
+-0.457297, -0.267878, 0.457297, 0.125, 0.375, -0.6539, -0.3805, 0.6539,
+-0.411556, -0.388899, 0.411556, 0.125, 0.3125, -0.5893, -0.5528, 0.5893,
+-0.274993, 0.494975, 0.411557, 0.15625, 0.75, -0.3945, 0.704, 0.5904,
+-0.274993, 0.582029, 0.274994, 0.125, 0.8125, -0.3958, 0.8286, 0.3958,
+-0.35, 0.494975, 0.35, 0.125, 0.75, -0.5021, 0.704, 0.5021,
+-0.323358, -0.388899, 0.483939, 0.15625, 0.3125, -0.463, -0.5528, 0.6929,
+-0.35, -0.494975, 0.35, 0.125, 0.25, -0.5021, -0.704, 0.5021,
+-0.274993, -0.494975, 0.411557, 0.15625, 0.25, -0.3945, -0.704, 0.5904,
+-0.323358, 0.388899, 0.483939, 0.15625, 0.6875, -0.463, 0.5528, 0.6929,
+-0.35, 0.494975, 0.35, 0.125, 0.75, -0.5021, 0.704, 0.5021,
+-0.411556, 0.388899, 0.411556, 0.125, 0.6875, -0.5893, 0.5528, 0.5893,
+-0.485464, -0.136563, 0.485464, 0.125, 0.4375, -0.6937, -0.1939, 0.6937,
+-0.537724, -0.267878, 0.359296, 0.09375, 0.375, -0.7689, -0.3805, 0.5137,
+-0.457297, -0.267878, 0.457297, 0.125, 0.375, -0.6539, -0.3805, 0.6539,
+-0.189419, 0.646716, 0.189419, 0.125, 0.875, -0.2743, 0.9217, 0.2743,
+-0.323358, 0.582029, 0.216061, 0.09375, 0.8125, -0.4654, 0.8286, 0.311,
+-0.274993, 0.582029, 0.274994, 0.125, 0.8125, -0.3958, 0.8286, 0.3958,
+-0.411556, -0.388899, 0.411556, 0.125, 0.3125, -0.5893, -0.5528, 0.5893,
+-0.537724, -0.267878, 0.359296, 0.09375, 0.375, -0.7689, -0.3805, 0.5137,
+-0.483939, -0.388899, 0.323358, 0.09375, 0.3125, -0.6929, -0.5528, 0.463,
+-0.35, 0.494975, 0.35, 0.125, 0.75, -0.5021, 0.704, 0.5021,
+-0.323358, 0.582029, 0.216061, 0.09375, 0.8125, -0.4654, 0.8286, 0.311,
+-0.411556, 0.494975, 0.274993, 0.09375, 0.75, -0.5904, 0.704, 0.3945,
+-0.411556, -0.388899, 0.411556, 0.125, 0.3125, -0.5893, -0.5528, 0.5893,
+-0.411556, -0.494975, 0.274993, 0.09375, 0.25, -0.5904, -0.704, 0.3945,
+-0.35, -0.494975, 0.35, 0.125, 0.25, -0.5021, -0.704, 0.5021,
+-0.411556, 0.388899, 0.411556, 0.125, 0.6875, -0.5893, 0.5528, 0.5893,
+-0.411556, 0.494975, 0.274993, 0.09375, 0.75, -0.5904, 0.704, 0.3945,
+-0.483939, 0.388899, 0.323358, 0.09375, 0.6875, -0.6929, 0.5528, 0.463,
+-0.35, -0.494975, 0.35, 0.125, 0.25, -0.5021, -0.704, 0.5021,
+-0.323358, -0.582029, 0.216061, 0.09375, 0.1875, -0.4654, -0.8286, 0.311,
+-0.274993, -0.582029, 0.274993, 0.125, 0.1875, -0.3958, -0.8286, 0.3958,
+-0.411556, 0.388899, 0.411556, 0.125, 0.6875, -0.5893, 0.5528, 0.5893,
+-0.537724, 0.267878, 0.359296, 0.09375, 0.625, -0.7689, 0.3805, 0.5137,
+-0.457297, 0.267878, 0.457297, 0.125, 0.625, -0.6539, 0.3805, 0.6539,
+-0.189419, -0.646716, 0.189419, 0.125, 0.125, -0.2743, -0.9217, 0.2743,
+-0.323358, -0.582029, 0.216061, 0.09375, 0.1875, -0.4654, -0.8286, 0.311,
+-0.222733, -0.646716, 0.148825, 0.09375, 0.125, -0.3225, -0.9217, 0.2155,
+-0.485464, 0.136563, 0.485464, 0.125, 0.5625, -0.6937, 0.1939, 0.6937,
+-0.537724, 0.267878, 0.359296, 0.09375, 0.625, -0.7689, 0.3805, 0.5137,
+-0.570845, 0.136563, 0.381427, 0.09375, 0.5625, -0.8157, 0.1939, 0.545,
+-0.189419, -0.646716, 0.189419, 0.125, 0.125, -0.2743, -0.9217, 0.2743,
+-0.113548, -0.68655, 0.075871, 0.09375, 0.0625, -0.1671, -0.9796, 0.1116,
+-0.096565, -0.68655, 0.096565, 0.125, 0.0625, -0.1421, -0.9796, 0.1421,
+-0.485464, 0.136563, 0.485464, 0.125, 0.5625, -0.6937, 0.1939, 0.6937,
+-0.582029, 0, 0.388899, 0.09375, 0.5, -0.8314, 0, 0.5556,
+-0.494975, 0, 0.494975, 0.125, 0.5, -0.7071, 0, 0.7071,
+-0.096565, 0.68655, 0.096565, 0.125, 0.9375, -0.1421, 0.9796, 0.1421,
+ 0, 0.7, 0, 0.109375, 1, 0, 1, 0,
+-0.113548, 0.68655, 0.075871, 0.09375, 0.9375, -0.1671, 0.9796, 0.1116,
+ 0, -0.7, 0, 0.109375, 0, 0, -1, 0,
+-0.096565, -0.68655, 0.096565, 0.125, 0.0625, -0.1421, -0.9796, 0.1421,
+-0.113548, -0.68655, 0.075871, 0.09375, 0.0625, -0.1671, -0.9796, 0.1116,
+-0.494975, 0, 0.494975, 0.125, 0.5, -0.7071, 0, 0.7071,
+-0.570845, -0.136563, 0.381427, 0.09375, 0.4375, -0.8157, -0.1939, 0.545,
+-0.485464, -0.136563, 0.485464, 0.125, 0.4375, -0.6937, -0.1939, 0.6937,
+-0.096565, 0.68655, 0.096565, 0.125, 0.9375, -0.1421, 0.9796, 0.1421,
+-0.222733, 0.646716, 0.148825, 0.09375, 0.875, -0.3225, 0.9217, 0.2155,
+-0.189419, 0.646716, 0.189419, 0.125, 0.875, -0.2743, 0.9217, 0.2743,
+-0.222733, -0.646716, 0.148825, 0.09375, 0.125, -0.3225, -0.9217, 0.2155,
+-0.359296, -0.582029, 0.148825, 0.0625, 0.1875, -0.5171, -0.8286, 0.2142,
+-0.247487, -0.646716, 0.102513, 0.0625, 0.125, -0.3583, -0.9217, 0.1484,
+-0.570845, 0.136563, 0.381427, 0.09375, 0.5625, -0.8157, 0.1939, 0.545,
+-0.597487, 0.267878, 0.247488, 0.0625, 0.625, -0.8544, 0.3805, 0.3539,
+-0.634289, 0.136563, 0.262731, 0.0625, 0.5625, -0.9063, 0.1939, 0.3754,
+-0.113548, -0.68655, 0.075871, 0.09375, 0.0625, -0.1671, -0.9796, 0.1116,
+-0.247487, -0.646716, 0.102513, 0.0625, 0.125, -0.3583, -0.9217, 0.1484,
+-0.126168, -0.68655, 0.052261, 0.0625, 0.0625, -0.1856, -0.9796, 0.0769,
+-0.570845, 0.136563, 0.381427, 0.09375, 0.5625, -0.8157, 0.1939, 0.545,
+-0.646716, 0, 0.267878, 0.0625, 0.5, -0.9239, 0, 0.3827,
+-0.582029, 0, 0.388899, 0.09375, 0.5, -0.8314, 0, 0.5556,
+-0.113548, 0.68655, 0.075871, 0.09375, 0.9375, -0.1671, 0.9796, 0.1116,
+ 0, 0.7, 0, 0.078125, 1, 0, 1, 0,
+-0.126168, 0.68655, 0.052261, 0.0625, 0.9375, -0.1856, 0.9796, 0.0769,
+ 0, -0.7, 0, 0.078125, 0, 0, -1, 0,
+-0.113548, -0.68655, 0.075871, 0.09375, 0.0625, -0.1671, -0.9796, 0.1116,
+-0.126168, -0.68655, 0.052261, 0.0625, 0.0625, -0.1856, -0.9796, 0.0769,
+-0.582029, 0, 0.388899, 0.09375, 0.5, -0.8314, 0, 0.5556,
+-0.634289, -0.136563, 0.262731, 0.0625, 0.4375, -0.9063, -0.1939, 0.3754,
+-0.570845, -0.136563, 0.381427, 0.09375, 0.4375, -0.8157, -0.1939, 0.545,
+-0.113548, 0.68655, 0.075871, 0.09375, 0.9375, -0.1671, 0.9796, 0.1116,
+-0.247487, 0.646716, 0.102513, 0.0625, 0.875, -0.3583, 0.9217, 0.1484,
+-0.222733, 0.646716, 0.148825, 0.09375, 0.875, -0.3225, 0.9217, 0.2155,
+-0.570845, -0.136563, 0.381427, 0.09375, 0.4375, -0.8157, -0.1939, 0.545,
+-0.597487, -0.267878, 0.247488, 0.0625, 0.375, -0.8544, -0.3805, 0.3539,
+-0.537724, -0.267878, 0.359296, 0.09375, 0.375, -0.7689, -0.3805, 0.5137,
+-0.222733, 0.646716, 0.148825, 0.09375, 0.875, -0.3225, 0.9217, 0.2155,
+-0.359296, 0.582029, 0.148825, 0.0625, 0.8125, -0.5171, 0.8286, 0.2142,
+-0.323358, 0.582029, 0.216061, 0.09375, 0.8125, -0.4654, 0.8286, 0.311,
+-0.483939, -0.388899, 0.323358, 0.09375, 0.3125, -0.6929, -0.5528, 0.463,
+-0.597487, -0.267878, 0.247488, 0.0625, 0.375, -0.8544, -0.3805, 0.3539,
+-0.537724, -0.388899, 0.222733, 0.0625, 0.3125, -0.7699, -0.5528, 0.3189,
+-0.411556, 0.494975, 0.274993, 0.09375, 0.75, -0.5904, 0.704, 0.3945,
+-0.359296, 0.582029, 0.148825, 0.0625, 0.8125, -0.5171, 0.8286, 0.2142,
+-0.457297, 0.494975, 0.189419, 0.0625, 0.75, -0.6561, 0.704, 0.2717,
+-0.411556, -0.494975, 0.274993, 0.09375, 0.25, -0.5904, -0.704, 0.3945,
+-0.537724, -0.388899, 0.222733, 0.0625, 0.3125, -0.7699, -0.5528, 0.3189,
+-0.457297, -0.494975, 0.189419, 0.0625, 0.25, -0.6561, -0.704, 0.2717,
+-0.483939, 0.388899, 0.323358, 0.09375, 0.6875, -0.6929, 0.5528, 0.463,
+-0.457297, 0.494975, 0.189419, 0.0625, 0.75, -0.6561, 0.704, 0.2717,
+-0.537724, 0.388899, 0.222733, 0.0625, 0.6875, -0.7699, 0.5528, 0.3189,
+-0.411556, -0.494975, 0.274993, 0.09375, 0.25, -0.5904, -0.704, 0.3945,
+-0.359296, -0.582029, 0.148825, 0.0625, 0.1875, -0.5171, -0.8286, 0.2142,
+-0.323358, -0.582029, 0.216061, 0.09375, 0.1875, -0.4654, -0.8286, 0.311,
+-0.483939, 0.388899, 0.323358, 0.09375, 0.6875, -0.6929, 0.5528, 0.463,
+-0.597487, 0.267878, 0.247488, 0.0625, 0.625, -0.8544, 0.3805, 0.3539,
+-0.537724, 0.267878, 0.359296, 0.09375, 0.625, -0.7689, 0.3805, 0.5137,
+-0.247487, 0.646716, 0.102513, 0.0625, 0.875, -0.3583, 0.9217, 0.1484,
+-0.381427, 0.582029, 0.075871, 0.03125, 0.8125, -0.549, 0.8286, 0.1092,
+-0.359296, 0.582029, 0.148825, 0.0625, 0.8125, -0.5171, 0.8286, 0.2142,
+-0.537724, -0.388899, 0.222733, 0.0625, 0.3125, -0.7699, -0.5528, 0.3189,
+-0.634289, -0.267878, 0.126168, 0.03125, 0.375, -0.907, -0.3805, 0.1804,
+-0.570845, -0.388899, 0.113548, 0.03125, 0.3125, -0.8173, -0.5528, 0.1626,
+-0.457297, 0.494975, 0.189419, 0.0625, 0.75, -0.6561, 0.704, 0.2717,
+-0.381427, 0.582029, 0.075871, 0.03125, 0.8125, -0.549, 0.8286, 0.1092,
+-0.485464, 0.494975, 0.096565, 0.03125, 0.75, -0.6965, 0.704, 0.1385,
+-0.537724, -0.388899, 0.222733, 0.0625, 0.3125, -0.7699, -0.5528, 0.3189,
+-0.485464, -0.494975, 0.096565, 0.03125, 0.25, -0.6965, -0.704, 0.1385,
+-0.457297, -0.494975, 0.189419, 0.0625, 0.25, -0.6561, -0.704, 0.2717,
+-0.537724, 0.388899, 0.222733, 0.0625, 0.6875, -0.7699, 0.5528, 0.3189,
+-0.485464, 0.494975, 0.096565, 0.03125, 0.75, -0.6965, 0.704, 0.1385,
+-0.570845, 0.388899, 0.113548, 0.03125, 0.6875, -0.8173, 0.5528, 0.1626,
+-0.457297, -0.494975, 0.189419, 0.0625, 0.25, -0.6561, -0.704, 0.2717,
+-0.381426, -0.582029, 0.075871, 0.03125, 0.1875, -0.549, -0.8286, 0.1092,
+-0.359296, -0.582029, 0.148825, 0.0625, 0.1875, -0.5171, -0.8286, 0.2142,
+-0.537724, 0.388899, 0.222733, 0.0625, 0.6875, -0.7699, 0.5528, 0.3189,
+-0.634289, 0.267878, 0.126168, 0.03125, 0.625, -0.907, 0.3805, 0.1804,
+-0.597487, 0.267878, 0.247488, 0.0625, 0.625, -0.8544, 0.3805, 0.3539,
+-0.247487, -0.646716, 0.102513, 0.0625, 0.125, -0.3583, -0.9217, 0.1484,
+-0.381426, -0.582029, 0.075871, 0.03125, 0.1875, -0.549, -0.8286, 0.1092,
+-0.262731, -0.646716, 0.052261, 0.03125, 0.125, -0.3804, -0.9217, 0.0757,
+-0.634289, 0.136563, 0.262731, 0.0625, 0.5625, -0.9063, 0.1939, 0.3754,
+-0.634289, 0.267878, 0.126168, 0.03125, 0.625, -0.907, 0.3805, 0.1804,
+-0.673358, 0.136563, 0.133939, 0.03125, 0.5625, -0.9622, 0.1939, 0.1914,
+-0.247487, -0.646716, 0.102513, 0.0625, 0.125, -0.3583, -0.9217, 0.1484,
+-0.133939, -0.68655, 0.026642, 0.03125, 0.0625, -0.1971, -0.9796, 0.0392,
+-0.126168, -0.68655, 0.052261, 0.0625, 0.0625, -0.1856, -0.9796, 0.0769,
+-0.634289, 0.136563, 0.262731, 0.0625, 0.5625, -0.9063, 0.1939, 0.3754,
+-0.68655, 0, 0.136563, 0.03125, 0.5, -0.9808, 0, 0.1951,
+-0.646716, 0, 0.267878, 0.0625, 0.5, -0.9239, 0, 0.3827,
+-0.126168, 0.68655, 0.052261, 0.0625, 0.9375, -0.1856, 0.9796, 0.0769,
+ 0, 0.7, 0, 0.046875, 1, 0, 1, 0,
+-0.133939, 0.68655, 0.026642, 0.03125, 0.9375, -0.1971, 0.9796, 0.0392,
+ 0, -0.7, 0, 0.046875, 0, 0, -1, 0,
+-0.126168, -0.68655, 0.052261, 0.0625, 0.0625, -0.1856, -0.9796, 0.0769,
+-0.133939, -0.68655, 0.026642, 0.03125, 0.0625, -0.1971, -0.9796, 0.0392,
+-0.646716, 0, 0.267878, 0.0625, 0.5, -0.9239, 0, 0.3827,
+-0.673358, -0.136563, 0.133939, 0.03125, 0.4375, -0.9622, -0.1939, 0.1914,
+-0.634289, -0.136563, 0.262731, 0.0625, 0.4375, -0.9063, -0.1939, 0.3754,
+-0.247487, 0.646716, 0.102513, 0.0625, 0.875, -0.3583, 0.9217, 0.1484,
+-0.133939, 0.68655, 0.026642, 0.03125, 0.9375, -0.1971, 0.9796, 0.0392,
+-0.262731, 0.646716, 0.052261, 0.03125, 0.875, -0.3804, 0.9217, 0.0757,
+-0.634289, -0.136563, 0.262731, 0.0625, 0.4375, -0.9063, -0.1939, 0.3754,
+-0.634289, -0.267878, 0.126168, 0.03125, 0.375, -0.907, -0.3805, 0.1804,
+-0.597487, -0.267878, 0.247488, 0.0625, 0.375, -0.8544, -0.3805, 0.3539,
+-0.673358, 0.136563, 0.133939, 0.03125, 0.5625, -0.9622, 0.1939, 0.1914,
+-0.646716, 0.267878, 0, 0, 0.625, -0.9247, 0.3805, 0,
+-0.686549, 0.136563, 0, 0, 0.5625, -0.981, 0.1939, 0,
+-0.262731, -0.646716, 0.052261, 0.03125, 0.125, -0.3804, -0.9217, 0.0757,
+-0.136563, -0.68655, 0, 0, 0.0625, -0.201, -0.9796, 0,
+-0.133939, -0.68655, 0.026642, 0.03125, 0.0625, -0.1971, -0.9796, 0.0392,
+-0.673358, 0.136563, 0.133939, 0.03125, 0.5625, -0.9622, 0.1939, 0.1914,
+-0.7, 0, 0, 0, 0.5, -1, 0, 0,
+-0.68655, 0, 0.136563, 0.03125, 0.5, -0.9808, 0, 0.1951,
+-0.133939, 0.68655, 0.026642, 0.03125, 0.9375, -0.1971, 0.9796, 0.0392,
+ 0, 0.7, 0, 0.015625, 1, 0, 1, 0,
+-0.136563, 0.68655, 0, 0, 0.9375, -0.201, 0.9796, 0,
+ 0, -0.7, 0, 0.015625, 0, 0, -1, 0,
+-0.133939, -0.68655, 0.026642, 0.03125, 0.0625, -0.1971, -0.9796, 0.0392,
+-0.136563, -0.68655, 0, 0, 0.0625, -0.201, -0.9796, 0,
+-0.673358, -0.136563, 0.133939, 0.03125, 0.4375, -0.9622, -0.1939, 0.1914,
+-0.7, 0, 0, 0, 0.5, -1, 0, 0,
+-0.686549, -0.136563, 0, 0, 0.4375, -0.981, -0.1939, 0,
+-0.262731, 0.646716, 0.052261, 0.03125, 0.875, -0.3804, 0.9217, 0.0757,
+-0.136563, 0.68655, 0, 0, 0.9375, -0.201, 0.9796, 0,
+-0.267878, 0.646716, 0, 0, 0.875, -0.3879, 0.9217, 0,
+-0.673358, -0.136563, 0.133939, 0.03125, 0.4375, -0.9622, -0.1939, 0.1914,
+-0.646716, -0.267878, 0, 0, 0.375, -0.9247, -0.3805, 0,
+-0.634289, -0.267878, 0.126168, 0.03125, 0.375, -0.907, -0.3805, 0.1804,
+-0.262731, 0.646716, 0.052261, 0.03125, 0.875, -0.3804, 0.9217, 0.0757,
+-0.388899, 0.582029, 0, 0, 0.8125, -0.5598, 0.8286, 0,
+-0.381427, 0.582029, 0.075871, 0.03125, 0.8125, -0.549, 0.8286, 0.1092,
+-0.570845, -0.388899, 0.113548, 0.03125, 0.3125, -0.8173, -0.5528, 0.1626,
+-0.646716, -0.267878, 0, 0, 0.375, -0.9247, -0.3805, 0,
+-0.582028, -0.388899, 0, 0, 0.3125, -0.8333, -0.5528, 0,
+-0.485464, 0.494975, 0.096565, 0.03125, 0.75, -0.6965, 0.704, 0.1385,
+-0.388899, 0.582029, 0, 0, 0.8125, -0.5598, 0.8286, 0,
+-0.494975, 0.494975, 0, 0, 0.75, -0.7101, 0.704, 0,
+-0.570845, -0.388899, 0.113548, 0.03125, 0.3125, -0.8173, -0.5528, 0.1626,
+-0.494975, -0.494975, 0, 0, 0.25, -0.7101, -0.704, 0,
+-0.485464, -0.494975, 0.096565, 0.03125, 0.25, -0.6965, -0.704, 0.1385,
+-0.485464, 0.494975, 0.096565, 0.03125, 0.75, -0.6965, 0.704, 0.1385,
+-0.582028, 0.388899, 0, 0, 0.6875, -0.8333, 0.5528, 0,
+-0.570845, 0.388899, 0.113548, 0.03125, 0.6875, -0.8173, 0.5528, 0.1626,
+-0.381426, -0.582029, 0.075871, 0.03125, 0.1875, -0.549, -0.8286, 0.1092,
+-0.494975, -0.494975, 0, 0, 0.25, -0.7101, -0.704, 0,
+-0.388899, -0.582029, 0, 0, 0.1875, -0.5598, -0.8286, 0,
+-0.570845, 0.388899, 0.113548, 0.03125, 0.6875, -0.8173, 0.5528, 0.1626,
+-0.646716, 0.267878, 0, 0, 0.625, -0.9247, 0.3805, 0,
+-0.634289, 0.267878, 0.126168, 0.03125, 0.625, -0.907, 0.3805, 0.1804,
+-0.262731, -0.646716, 0.052261, 0.03125, 0.125, -0.3804, -0.9217, 0.0757,
+-0.388899, -0.582029, 0, 0, 0.1875, -0.5598, -0.8286, 0,
+-0.267878, -0.646716, 0, 0, 0.125, -0.3879, -0.9217, 0,
+-0.582028, -0.388899, 0, 1, 0.3125, -0.8333, -0.5528, 0,
+-0.634289, -0.267878, -0.126168, 0.96875, 0.375, -0.907, -0.3805, -0.1804,
+-0.570845, -0.388899, -0.113548, 0.96875, 0.3125, -0.8173, -0.5528, -0.1626,
+-0.494975, 0.494975, 0, 1, 0.75, -0.7101, 0.704, 0,
+-0.381427, 0.582029, -0.07587, 0.96875, 0.8125, -0.549, 0.8286, -0.1092,
+-0.485464, 0.494975, -0.096565, 0.96875, 0.75, -0.6965, 0.704, -0.1385,
+-0.582028, -0.388899, 0, 1, 0.3125, -0.8333, -0.5528, 0,
+-0.485464, -0.494975, -0.096565, 0.96875, 0.25, -0.6965, -0.704, -0.1385,
+-0.494975, -0.494975, 0, 1, 0.25, -0.7101, -0.704, 0,
+-0.582028, 0.388899, 0, 1, 0.6875, -0.8333, 0.5528, 0,
+-0.485464, 0.494975, -0.096565, 0.96875, 0.75, -0.6965, 0.704, -0.1385,
+-0.570845, 0.388899, -0.113548, 0.96875, 0.6875, -0.8173, 0.5528, -0.1626,
+-0.494975, -0.494975, 0, 1, 0.25, -0.7101, -0.704, 0,
+-0.381426, -0.582029, -0.07587, 0.96875, 0.1875, -0.549, -0.8286, -0.1092,
+-0.388899, -0.582029, 0, 1, 0.1875, -0.5598, -0.8286, 0,
+-0.582028, 0.388899, 0, 1, 0.6875, -0.8333, 0.5528, 0,
+-0.634289, 0.267878, -0.126168, 0.96875, 0.625, -0.907, 0.3805, -0.1804,
+-0.646716, 0.267878, 0, 1, 0.625, -0.9247, 0.3805, 0,
+-0.267878, -0.646716, 0, 1, 0.125, -0.3879, -0.9217, 0,
+-0.381426, -0.582029, -0.07587, 0.96875, 0.1875, -0.549, -0.8286, -0.1092,
+-0.262731, -0.646716, -0.05226, 0.96875, 0.125, -0.3804, -0.9217, -0.0757,
+-0.686549, 0.136563, 0, 1, 0.5625, -0.981, 0.1939, 0,
+-0.634289, 0.267878, -0.126168, 0.96875, 0.625, -0.907, 0.3805, -0.1804,
+-0.673357, 0.136563, -0.133939, 0.96875, 0.5625, -0.9622, 0.1939, -0.1914,
+-0.267878, -0.646716, 0, 1, 0.125, -0.3879, -0.9217, 0,
+-0.133939, -0.68655, -0.026642, 0.96875, 0.0625, -0.1971, -0.9796, -0.0392,
+-0.136563, -0.68655, 0, 1, 0.0625, -0.201, -0.9796, 0,
+-0.686549, 0.136563, 0, 1, 0.5625, -0.981, 0.1939, 0,
+-0.686549, 0, -0.136563, 0.96875, 0.5, -0.9808, 0, -0.1951,
+-0.7, 0, 0, 1, 0.5, -1, 0, 0,
+-0.136563, 0.68655, 0, 1, 0.9375, -0.201, 0.9796, 0,
+ 0, 0.7, 0, 0.984375, 1, 0, 1, 0,
+-0.133939, 0.68655, -0.026642, 0.96875, 0.9375, -0.1971, 0.9796, -0.0392,
+ 0, -0.7, 0, 0.984375, 0, 0, -1, 0,
+-0.136563, -0.68655, 0, 1, 0.0625, -0.201, -0.9796, 0,
+-0.133939, -0.68655, -0.026642, 0.96875, 0.0625, -0.1971, -0.9796, -0.0392,
+-0.686549, -0.136563, 0, 1, 0.4375, -0.981, -0.1939, 0,
+-0.686549, 0, -0.136563, 0.96875, 0.5, -0.9808, 0, -0.1951,
+-0.673357, -0.136563, -0.133939, 0.96875, 0.4375, -0.9622, -0.1939, -0.1914,
+-0.267878, 0.646716, 0, 1, 0.875, -0.3879, 0.9217, 0,
+-0.133939, 0.68655, -0.026642, 0.96875, 0.9375, -0.1971, 0.9796, -0.0392,
+-0.262731, 0.646716, -0.05226, 0.96875, 0.875, -0.3804, 0.9217, -0.0757,
+-0.686549, -0.136563, 0, 1, 0.4375, -0.981, -0.1939, 0,
+-0.634289, -0.267878, -0.126168, 0.96875, 0.375, -0.907, -0.3805, -0.1804,
+-0.646716, -0.267878, 0, 1, 0.375, -0.9247, -0.3805, 0,
+-0.267878, 0.646716, 0, 1, 0.875, -0.3879, 0.9217, 0,
+-0.381427, 0.582029, -0.07587, 0.96875, 0.8125, -0.549, 0.8286, -0.1092,
+-0.388899, 0.582029, 0, 1, 0.8125, -0.5598, 0.8286, 0,
+-0.262731, -0.646716, -0.05226, 0.96875, 0.125, -0.3804, -0.9217, -0.0757,
+-0.126168, -0.68655, -0.05226, 0.9375, 0.0625, -0.1856, -0.9796, -0.0769,
+-0.133939, -0.68655, -0.026642, 0.96875, 0.0625, -0.1971, -0.9796, -0.0392,
+-0.673357, 0.136563, -0.133939, 0.96875, 0.5625, -0.9622, 0.1939, -0.1914,
+-0.646715, 0, -0.267878, 0.9375, 0.5, -0.9239, 0, -0.3827,
+-0.686549, 0, -0.136563, 0.96875, 0.5, -0.9808, 0, -0.1951,
+-0.133939, 0.68655, -0.026642, 0.96875, 0.9375, -0.1971, 0.9796, -0.0392,
+ 0, 0.7, 0, 0.953125, 1, 0, 1, 0,
+-0.126168, 0.68655, -0.05226, 0.9375, 0.9375, -0.1856, 0.9796, -0.0769,
+ 0, -0.7, 0, 0.953125, 0, 0, -1, 0,
+-0.133939, -0.68655, -0.026642, 0.96875, 0.0625, -0.1971, -0.9796, -0.0392,
+-0.126168, -0.68655, -0.05226, 0.9375, 0.0625, -0.1856, -0.9796, -0.0769,
+-0.686549, 0, -0.136563, 0.96875, 0.5, -0.9808, 0, -0.1951,
+-0.634289, -0.136563, -0.262731, 0.9375, 0.4375, -0.9063, -0.1939, -0.3754,
+-0.673357, -0.136563, -0.133939, 0.96875, 0.4375, -0.9622, -0.1939, -0.1914,
+-0.133939, 0.68655, -0.026642, 0.96875, 0.9375, -0.1971, 0.9796, -0.0392,
+-0.247487, 0.646716, -0.102512, 0.9375, 0.875, -0.3583, 0.9217, -0.1484,
+-0.262731, 0.646716, -0.05226, 0.96875, 0.875, -0.3804, 0.9217, -0.0757,
+-0.673357, -0.136563, -0.133939, 0.96875, 0.4375, -0.9622, -0.1939, -0.1914,
+-0.597487, -0.267878, -0.247487, 0.9375, 0.375, -0.8544, -0.3805, -0.3539,
+-0.634289, -0.267878, -0.126168, 0.96875, 0.375, -0.907, -0.3805, -0.1804,
+-0.262731, 0.646716, -0.05226, 0.96875, 0.875, -0.3804, 0.9217, -0.0757,
+-0.359296, 0.582029, -0.148825, 0.9375, 0.8125, -0.5171, 0.8286, -0.2142,
+-0.381427, 0.582029, -0.07587, 0.96875, 0.8125, -0.549, 0.8286, -0.1092,
+-0.570845, -0.388899, -0.113548, 0.96875, 0.3125, -0.8173, -0.5528, -0.1626,
+-0.597487, -0.267878, -0.247487, 0.9375, 0.375, -0.8544, -0.3805, -0.3539,
+-0.537724, -0.388899, -0.222733, 0.9375, 0.3125, -0.7699, -0.5528, -0.3189,
+-0.485464, 0.494975, -0.096565, 0.96875, 0.75, -0.6965, 0.704, -0.1385,
+-0.359296, 0.582029, -0.148825, 0.9375, 0.8125, -0.5171, 0.8286, -0.2142,
+-0.457297, 0.494975, -0.189418, 0.9375, 0.75, -0.6561, 0.704, -0.2717,
+-0.570845, -0.388899, -0.113548, 0.96875, 0.3125, -0.8173, -0.5528, -0.1626,
+-0.457297, -0.494975, -0.189418, 0.9375, 0.25, -0.6561, -0.704, -0.2717,
+-0.485464, -0.494975, -0.096565, 0.96875, 0.25, -0.6965, -0.704, -0.1385,
+-0.485464, 0.494975, -0.096565, 0.96875, 0.75, -0.6965, 0.704, -0.1385,
+-0.537724, 0.388899, -0.222733, 0.9375, 0.6875, -0.7699, 0.5528, -0.3189,
+-0.570845, 0.388899, -0.113548, 0.96875, 0.6875, -0.8173, 0.5528, -0.1626,
+-0.485464, -0.494975, -0.096565, 0.96875, 0.25, -0.6965, -0.704, -0.1385,
+-0.359296, -0.582029, -0.148825, 0.9375, 0.1875, -0.5171, -0.8286, -0.2142,
+-0.381426, -0.582029, -0.07587, 0.96875, 0.1875, -0.549, -0.8286, -0.1092,
+-0.570845, 0.388899, -0.113548, 0.96875, 0.6875, -0.8173, 0.5528, -0.1626,
+-0.597487, 0.267878, -0.247487, 0.9375, 0.625, -0.8544, 0.3805, -0.3539,
+-0.634289, 0.267878, -0.126168, 0.96875, 0.625, -0.907, 0.3805, -0.1804,
+-0.262731, -0.646716, -0.05226, 0.96875, 0.125, -0.3804, -0.9217, -0.0757,
+-0.359296, -0.582029, -0.148825, 0.9375, 0.1875, -0.5171, -0.8286, -0.2142,
+-0.247487, -0.646716, -0.102512, 0.9375, 0.125, -0.3583, -0.9217, -0.1484,
+-0.673357, 0.136563, -0.133939, 0.96875, 0.5625, -0.9622, 0.1939, -0.1914,
+-0.597487, 0.267878, -0.247487, 0.9375, 0.625, -0.8544, 0.3805, -0.3539,
+-0.634289, 0.136563, -0.262731, 0.9375, 0.5625, -0.9063, 0.1939, -0.3754,
+-0.457297, 0.494975, -0.189418, 0.9375, 0.75, -0.6561, 0.704, -0.2717,
+-0.323358, 0.582029, -0.216061, 0.90625, 0.8125, -0.4654, 0.8286, -0.311,
+-0.411556, 0.494975, -0.274993, 0.90625, 0.75, -0.5904, 0.704, -0.3945,
+-0.537724, -0.388899, -0.222733, 0.9375, 0.3125, -0.7699, -0.5528, -0.3189,
+-0.411556, -0.494975, -0.274993, 0.90625, 0.25, -0.5904, -0.704, -0.3945,
+-0.457297, -0.494975, -0.189418, 0.9375, 0.25, -0.6561, -0.704, -0.2717,
+-0.537724, 0.388899, -0.222733, 0.9375, 0.6875, -0.7699, 0.5528, -0.3189,
+-0.411556, 0.494975, -0.274993, 0.90625, 0.75, -0.5904, 0.704, -0.3945,
+-0.483939, 0.388899, -0.323358, 0.90625, 0.6875, -0.6929, 0.5528, -0.463,
+-0.457297, -0.494975, -0.189418, 0.9375, 0.25, -0.6561, -0.704, -0.2717,
+-0.323358, -0.582029, -0.216061, 0.90625, 0.1875, -0.4654, -0.8286, -0.311,
+-0.359296, -0.582029, -0.148825, 0.9375, 0.1875, -0.5171, -0.8286, -0.2142,
+-0.537724, 0.388899, -0.222733, 0.9375, 0.6875, -0.7699, 0.5528, -0.3189,
+-0.537724, 0.267878, -0.359296, 0.90625, 0.625, -0.7689, 0.3805, -0.5137,
+-0.597487, 0.267878, -0.247487, 0.9375, 0.625, -0.8544, 0.3805, -0.3539,
+-0.247487, -0.646716, -0.102512, 0.9375, 0.125, -0.3583, -0.9217, -0.1484,
+-0.323358, -0.582029, -0.216061, 0.90625, 0.1875, -0.4654, -0.8286, -0.311,
+-0.222733, -0.646716, -0.148825, 0.90625, 0.125, -0.3225, -0.9217, -0.2155,
+-0.634289, 0.136563, -0.262731, 0.9375, 0.5625, -0.9063, 0.1939, -0.3754,
+-0.537724, 0.267878, -0.359296, 0.90625, 0.625, -0.7689, 0.3805, -0.5137,
+-0.570845, 0.136563, -0.381426, 0.90625, 0.5625, -0.8157, 0.1939, -0.545,
+-0.247487, -0.646716, -0.102512, 0.9375, 0.125, -0.3583, -0.9217, -0.1484,
+-0.113548, -0.68655, -0.07587, 0.90625, 0.0625, -0.1671, -0.9796, -0.1116,
+-0.126168, -0.68655, -0.05226, 0.9375, 0.0625, -0.1856, -0.9796, -0.0769,
+-0.634289, 0.136563, -0.262731, 0.9375, 0.5625, -0.9063, 0.1939, -0.3754,
+-0.582028, 0, -0.388899, 0.90625, 0.5, -0.8314, 0, -0.5556,
+-0.646715, 0, -0.267878, 0.9375, 0.5, -0.9239, 0, -0.3827,
+-0.126168, 0.68655, -0.05226, 0.9375, 0.9375, -0.1856, 0.9796, -0.0769,
+ 0, 0.7, 0, 0.921875, 1, 0, 1, 0,
+-0.113548, 0.68655, -0.07587, 0.90625, 0.9375, -0.1671, 0.9796, -0.1116,
+ 0, -0.7, 0, 0.921875, 0, 0, -1, 0,
+-0.126168, -0.68655, -0.05226, 0.9375, 0.0625, -0.1856, -0.9796, -0.0769,
+-0.113548, -0.68655, -0.07587, 0.90625, 0.0625, -0.1671, -0.9796, -0.1116,
+-0.634289, -0.136563, -0.262731, 0.9375, 0.4375, -0.9063, -0.1939, -0.3754,
+-0.582028, 0, -0.388899, 0.90625, 0.5, -0.8314, 0, -0.5556,
+-0.570845, -0.136563, -0.381426, 0.90625, 0.4375, -0.8157, -0.1939, -0.545,
+-0.126168, 0.68655, -0.05226, 0.9375, 0.9375, -0.1856, 0.9796, -0.0769,
+-0.222733, 0.646716, -0.148825, 0.90625, 0.875, -0.3225, 0.9217, -0.2155,
+-0.247487, 0.646716, -0.102512, 0.9375, 0.875, -0.3583, 0.9217, -0.1484,
+-0.634289, -0.136563, -0.262731, 0.9375, 0.4375, -0.9063, -0.1939, -0.3754,
+-0.537724, -0.267878, -0.359296, 0.90625, 0.375, -0.7689, -0.3805, -0.5137,
+-0.597487, -0.267878, -0.247487, 0.9375, 0.375, -0.8544, -0.3805, -0.3539,
+-0.359296, 0.582029, -0.148825, 0.9375, 0.8125, -0.5171, 0.8286, -0.2142,
+-0.222733, 0.646716, -0.148825, 0.90625, 0.875, -0.3225, 0.9217, -0.2155,
+-0.323358, 0.582029, -0.216061, 0.90625, 0.8125, -0.4654, 0.8286, -0.311,
+-0.537724, -0.388899, -0.222733, 0.9375, 0.3125, -0.7699, -0.5528, -0.3189,
+-0.537724, -0.267878, -0.359296, 0.90625, 0.375, -0.7689, -0.3805, -0.5137,
+-0.483939, -0.388899, -0.323358, 0.90625, 0.3125, -0.6929, -0.5528, -0.463,
+-0.570845, 0.136563, -0.381426, 0.90625, 0.5625, -0.8157, 0.1939, -0.545,
+-0.494974, 0, -0.494974, 0.875, 0.5, -0.7071, 0, -0.7071,
+-0.582028, 0, -0.388899, 0.90625, 0.5, -0.8314, 0, -0.5556,
+-0.113548, 0.68655, -0.07587, 0.90625, 0.9375, -0.1671, 0.9796, -0.1116,
+ 0, 0.7, 0, 0.890625, 1, 0, 1, 0,
+-0.096565, 0.68655, -0.096565, 0.875, 0.9375, -0.1421, 0.9796, -0.1421,
+ 0, -0.7, 0, 0.890625, 0, 0, -1, 0,
+-0.113548, -0.68655, -0.07587, 0.90625, 0.0625, -0.1671, -0.9796, -0.1116,
+-0.096565, -0.68655, -0.096565, 0.875, 0.0625, -0.1421, -0.9796, -0.1421,
+-0.570845, -0.136563, -0.381426, 0.90625, 0.4375, -0.8157, -0.1939, -0.545,
+-0.494974, 0, -0.494974, 0.875, 0.5, -0.7071, 0, -0.7071,
+-0.485464, -0.136563, -0.485464, 0.875, 0.4375, -0.6937, -0.1939, -0.6937,
+-0.113548, 0.68655, -0.07587, 0.90625, 0.9375, -0.1671, 0.9796, -0.1116,
+-0.189419, 0.646716, -0.189418, 0.875, 0.875, -0.2743, 0.9217, -0.2743,
+-0.222733, 0.646716, -0.148825, 0.90625, 0.875, -0.3225, 0.9217, -0.2155,
+-0.570845, -0.136563, -0.381426, 0.90625, 0.4375, -0.8157, -0.1939, -0.545,
+-0.457297, -0.267878, -0.457297, 0.875, 0.375, -0.6539, -0.3805, -0.6539,
+-0.537724, -0.267878, -0.359296, 0.90625, 0.375, -0.7689, -0.3805, -0.5137,
+-0.222733, 0.646716, -0.148825, 0.90625, 0.875, -0.3225, 0.9217, -0.2155,
+-0.274993, 0.582029, -0.274993, 0.875, 0.8125, -0.3958, 0.8286, -0.3958,
+-0.323358, 0.582029, -0.216061, 0.90625, 0.8125, -0.4654, 0.8286, -0.311,
+-0.483939, -0.388899, -0.323358, 0.90625, 0.3125, -0.6929, -0.5528, -0.463,
+-0.457297, -0.267878, -0.457297, 0.875, 0.375, -0.6539, -0.3805, -0.6539,
+-0.411556, -0.388899, -0.411556, 0.875, 0.3125, -0.5893, -0.5528, -0.5893,
+-0.323358, 0.582029, -0.216061, 0.90625, 0.8125, -0.4654, 0.8286, -0.311,
+-0.35, 0.494975, -0.35, 0.875, 0.75, -0.5021, 0.704, -0.5021,
+-0.411556, 0.494975, -0.274993, 0.90625, 0.75, -0.5904, 0.704, -0.3945,
+-0.483939, -0.388899, -0.323358, 0.90625, 0.3125, -0.6929, -0.5528, -0.463,
+-0.35, -0.494975, -0.35, 0.875, 0.25, -0.5021, -0.704, -0.5021,
+-0.411556, -0.494975, -0.274993, 0.90625, 0.25, -0.5904, -0.704, -0.3945,
+-0.483939, 0.388899, -0.323358, 0.90625, 0.6875, -0.6929, 0.5528, -0.463,
+-0.35, 0.494975, -0.35, 0.875, 0.75, -0.5021, 0.704, -0.5021,
+-0.411556, 0.388899, -0.411556, 0.875, 0.6875, -0.5893, 0.5528, -0.5893,
+-0.411556, -0.494975, -0.274993, 0.90625, 0.25, -0.5904, -0.704, -0.3945,
+-0.274993, -0.582029, -0.274993, 0.875, 0.1875, -0.3958, -0.8286, -0.3958,
+-0.323358, -0.582029, -0.216061, 0.90625, 0.1875, -0.4654, -0.8286, -0.311,
+-0.483939, 0.388899, -0.323358, 0.90625, 0.6875, -0.6929, 0.5528, -0.463,
+-0.457297, 0.267878, -0.457297, 0.875, 0.625, -0.6539, 0.3805, -0.6539,
+-0.537724, 0.267878, -0.359296, 0.90625, 0.625, -0.7689, 0.3805, -0.5137,
+-0.323358, -0.582029, -0.216061, 0.90625, 0.1875, -0.4654, -0.8286, -0.311,
+-0.189419, -0.646716, -0.189418, 0.875, 0.125, -0.2743, -0.9217, -0.2743,
+-0.222733, -0.646716, -0.148825, 0.90625, 0.125, -0.3225, -0.9217, -0.2155,
+-0.570845, 0.136563, -0.381426, 0.90625, 0.5625, -0.8157, 0.1939, -0.545,
+-0.457297, 0.267878, -0.457297, 0.875, 0.625, -0.6539, 0.3805, -0.6539,
+-0.485464, 0.136563, -0.485464, 0.875, 0.5625, -0.6937, 0.1939, -0.6937,
+-0.222733, -0.646716, -0.148825, 0.90625, 0.125, -0.3225, -0.9217, -0.2155,
+-0.096565, -0.68655, -0.096565, 0.875, 0.0625, -0.1421, -0.9796, -0.1421,
+-0.113548, -0.68655, -0.07587, 0.90625, 0.0625, -0.1671, -0.9796, -0.1116,
+-0.411556, -0.388899, -0.411556, 0.875, 0.3125, -0.5893, -0.5528, -0.5893,
+-0.274993, -0.494975, -0.411556, 0.84375, 0.25, -0.3945, -0.704, -0.5904,
+-0.35, -0.494975, -0.35, 0.875, 0.25, -0.5021, -0.704, -0.5021,
+-0.411556, 0.388899, -0.411556, 0.875, 0.6875, -0.5893, 0.5528, -0.5893,
+-0.274993, 0.494975, -0.411556, 0.84375, 0.75, -0.3945, 0.704, -0.5904,
+-0.323358, 0.388899, -0.483939, 0.84375, 0.6875, -0.463, 0.5528, -0.6929,
+-0.274993, -0.582029, -0.274993, 0.875, 0.1875, -0.3958, -0.8286, -0.3958,
+-0.274993, -0.494975, -0.411556, 0.84375, 0.25, -0.3945, -0.704, -0.5904,
+-0.216061, -0.582029, -0.323358, 0.84375, 0.1875, -0.311, -0.8286, -0.4654,
+-0.411556, 0.388899, -0.411556, 0.875, 0.6875, -0.5893, 0.5528, -0.5893,
+-0.359296, 0.267878, -0.537724, 0.84375, 0.625, -0.5137, 0.3805, -0.7689,
+-0.457297, 0.267878, -0.457297, 0.875, 0.625, -0.6539, 0.3805, -0.6539,
+-0.274993, -0.582029, -0.274993, 0.875, 0.1875, -0.3958, -0.8286, -0.3958,
+-0.148825, -0.646716, -0.222732, 0.84375, 0.125, -0.2155, -0.9217, -0.3225,
+-0.189419, -0.646716, -0.189418, 0.875, 0.125, -0.2743, -0.9217, -0.2743,
+-0.485464, 0.136563, -0.485464, 0.875, 0.5625, -0.6937, 0.1939, -0.6937,
+-0.359296, 0.267878, -0.537724, 0.84375, 0.625, -0.5137, 0.3805, -0.7689,
+-0.381426, 0.136563, -0.570845, 0.84375, 0.5625, -0.545, 0.1939, -0.8157,
+-0.189419, -0.646716, -0.189418, 0.875, 0.125, -0.2743, -0.9217, -0.2743,
+-0.07587, -0.68655, -0.113548, 0.84375, 0.0625, -0.1116, -0.9796, -0.1671,
+-0.096565, -0.68655, -0.096565, 0.875, 0.0625, -0.1421, -0.9796, -0.1421,
+-0.494974, 0, -0.494974, 0.875, 0.5, -0.7071, 0, -0.7071,
+-0.381426, 0.136563, -0.570845, 0.84375, 0.5625, -0.545, 0.1939, -0.8157,
+-0.388899, 0, -0.582028, 0.84375, 0.5, -0.5556, 0, -0.8314,
+-0.096565, 0.68655, -0.096565, 0.875, 0.9375, -0.1421, 0.9796, -0.1421,
+ 0, 0.7, 0, 0.859375, 1, 0, 1, 0,
+-0.07587, 0.68655, -0.113548, 0.84375, 0.9375, -0.1116, 0.9796, -0.1671,
+ 0, -0.7, 0, 0.859375, 0, 0, -1, 0,
+-0.096565, -0.68655, -0.096565, 0.875, 0.0625, -0.1421, -0.9796, -0.1421,
+-0.07587, -0.68655, -0.113548, 0.84375, 0.0625, -0.1116, -0.9796, -0.1671,
+-0.494974, 0, -0.494974, 0.875, 0.5, -0.7071, 0, -0.7071,
+-0.381426, -0.136563, -0.570845, 0.84375, 0.4375, -0.545, -0.1939, -0.8157,
+-0.485464, -0.136563, -0.485464, 0.875, 0.4375, -0.6937, -0.1939, -0.6937,
+-0.096565, 0.68655, -0.096565, 0.875, 0.9375, -0.1421, 0.9796, -0.1421,
+-0.148825, 0.646716, -0.222732, 0.84375, 0.875, -0.2155, 0.9217, -0.3225,
+-0.189419, 0.646716, -0.189418, 0.875, 0.875, -0.2743, 0.9217, -0.2743,
+-0.485464, -0.136563, -0.485464, 0.875, 0.4375, -0.6937, -0.1939, -0.6937,
+-0.359296, -0.267878, -0.537724, 0.84375, 0.375, -0.5137, -0.3805, -0.7689,
+-0.457297, -0.267878, -0.457297, 0.875, 0.375, -0.6539, -0.3805, -0.6539,
+-0.189419, 0.646716, -0.189418, 0.875, 0.875, -0.2743, 0.9217, -0.2743,
+-0.216061, 0.582029, -0.323358, 0.84375, 0.8125, -0.311, 0.8286, -0.4654,
+-0.274993, 0.582029, -0.274993, 0.875, 0.8125, -0.3958, 0.8286, -0.3958,
+-0.411556, -0.388899, -0.411556, 0.875, 0.3125, -0.5893, -0.5528, -0.5893,
+-0.359296, -0.267878, -0.537724, 0.84375, 0.375, -0.5137, -0.3805, -0.7689,
+-0.323358, -0.388899, -0.483939, 0.84375, 0.3125, -0.463, -0.5528, -0.6929,
+-0.274993, 0.582029, -0.274993, 0.875, 0.8125, -0.3958, 0.8286, -0.3958,
+-0.274993, 0.494975, -0.411556, 0.84375, 0.75, -0.3945, 0.704, -0.5904,
+-0.35, 0.494975, -0.35, 0.875, 0.75, -0.5021, 0.704, -0.5021,
+ 0, -0.7, 0, 0.828125, 0, 0, -1, 0,
+-0.07587, -0.68655, -0.113548, 0.84375, 0.0625, -0.1116, -0.9796, -0.1671,
+-0.05226, -0.68655, -0.126168, 0.8125, 0.0625, -0.0769, -0.9796, -0.1856,
+-0.388899, 0, -0.582028, 0.84375, 0.5, -0.5556, 0, -0.8314,
+-0.262731, -0.136563, -0.634289, 0.8125, 0.4375, -0.3754, -0.1939, -0.9063,
+-0.381426, -0.136563, -0.570845, 0.84375, 0.4375, -0.545, -0.1939, -0.8157,
+-0.148825, 0.646716, -0.222732, 0.84375, 0.875, -0.2155, 0.9217, -0.3225,
+-0.05226, 0.68655, -0.126168, 0.8125, 0.9375, -0.0769, 0.9796, -0.1856,
+-0.102513, 0.646716, -0.247487, 0.8125, 0.875, -0.1484, 0.9217, -0.3583,
+-0.381426, -0.136563, -0.570845, 0.84375, 0.4375, -0.545, -0.1939, -0.8157,
+-0.247487, -0.267878, -0.597487, 0.8125, 0.375, -0.3539, -0.3805, -0.8544,
+-0.359296, -0.267878, -0.537724, 0.84375, 0.375, -0.5137, -0.3805, -0.7689,
+-0.216061, 0.582029, -0.323358, 0.84375, 0.8125, -0.311, 0.8286, -0.4654,
+-0.102513, 0.646716, -0.247487, 0.8125, 0.875, -0.1484, 0.9217, -0.3583,
+-0.148825, 0.582029, -0.359296, 0.8125, 0.8125, -0.2142, 0.8286, -0.5171,
+-0.323358, -0.388899, -0.483939, 0.84375, 0.3125, -0.463, -0.5528, -0.6929,
+-0.247487, -0.267878, -0.597487, 0.8125, 0.375, -0.3539, -0.3805, -0.8544,
+-0.222732, -0.388899, -0.537724, 0.8125, 0.3125, -0.3189, -0.5528, -0.7699,
+-0.274993, 0.494975, -0.411556, 0.84375, 0.75, -0.3945, 0.704, -0.5904,
+-0.148825, 0.582029, -0.359296, 0.8125, 0.8125, -0.2142, 0.8286, -0.5171,
+-0.189419, 0.494975, -0.457297, 0.8125, 0.75, -0.2717, 0.704, -0.6561,
+-0.323358, -0.388899, -0.483939, 0.84375, 0.3125, -0.463, -0.5528, -0.6929,
+-0.189419, -0.494975, -0.457297, 0.8125, 0.25, -0.2717, -0.704, -0.6561,
+-0.274993, -0.494975, -0.411556, 0.84375, 0.25, -0.3945, -0.704, -0.5904,
+-0.323358, 0.388899, -0.483939, 0.84375, 0.6875, -0.463, 0.5528, -0.6929,
+-0.189419, 0.494975, -0.457297, 0.8125, 0.75, -0.2717, 0.704, -0.6561,
+-0.222732, 0.388899, -0.537724, 0.8125, 0.6875, -0.3189, 0.5528, -0.7699,
+-0.274993, -0.494975, -0.411556, 0.84375, 0.25, -0.3945, -0.704, -0.5904,
+-0.148825, -0.582029, -0.359296, 0.8125, 0.1875, -0.2142, -0.8286, -0.5171,
+-0.216061, -0.582029, -0.323358, 0.84375, 0.1875, -0.311, -0.8286, -0.4654,
+-0.323358, 0.388899, -0.483939, 0.84375, 0.6875, -0.463, 0.5528, -0.6929,
+-0.247487, 0.267878, -0.597487, 0.8125, 0.625, -0.3539, 0.3805, -0.8544,
+-0.359296, 0.267878, -0.537724, 0.84375, 0.625, -0.5137, 0.3805, -0.7689,
+-0.216061, -0.582029, -0.323358, 0.84375, 0.1875, -0.311, -0.8286, -0.4654,
+-0.102513, -0.646716, -0.247487, 0.8125, 0.125, -0.1484, -0.9217, -0.3583,
+-0.148825, -0.646716, -0.222732, 0.84375, 0.125, -0.2155, -0.9217, -0.3225,
+-0.381426, 0.136563, -0.570845, 0.84375, 0.5625, -0.545, 0.1939, -0.8157,
+-0.247487, 0.267878, -0.597487, 0.8125, 0.625, -0.3539, 0.3805, -0.8544,
+-0.262731, 0.136563, -0.634289, 0.8125, 0.5625, -0.3754, 0.1939, -0.9063,
+-0.148825, -0.646716, -0.222732, 0.84375, 0.125, -0.2155, -0.9217, -0.3225,
+-0.05226, -0.68655, -0.126168, 0.8125, 0.0625, -0.0769, -0.9796, -0.1856,
+-0.07587, -0.68655, -0.113548, 0.84375, 0.0625, -0.1116, -0.9796, -0.1671,
+-0.381426, 0.136563, -0.570845, 0.84375, 0.5625, -0.545, 0.1939, -0.8157,
+-0.267878, 0, -0.646715, 0.8125, 0.5, -0.3827, 0, -0.9239,
+-0.388899, 0, -0.582028, 0.84375, 0.5, -0.5556, 0, -0.8314,
+-0.07587, 0.68655, -0.113548, 0.84375, 0.9375, -0.1116, 0.9796, -0.1671,
+ 0, 0.7, 0, 0.828125, 1, 0, 1, 0,
+-0.05226, 0.68655, -0.126168, 0.8125, 0.9375, -0.0769, 0.9796, -0.1856,
+-0.189419, -0.494975, -0.457297, 0.8125, 0.25, -0.2717, -0.704, -0.6561,
+-0.07587, -0.582029, -0.381426, 0.78125, 0.1875, -0.1092, -0.8286, -0.549,
+-0.148825, -0.582029, -0.359296, 0.8125, 0.1875, -0.2142, -0.8286, -0.5171,
+-0.222732, 0.388899, -0.537724, 0.8125, 0.6875, -0.3189, 0.5528, -0.7699,
+-0.126168, 0.267878, -0.634289, 0.78125, 0.625, -0.1804, 0.3805, -0.907,
+-0.247487, 0.267878, -0.597487, 0.8125, 0.625, -0.3539, 0.3805, -0.8544,
+-0.148825, -0.582029, -0.359296, 0.8125, 0.1875, -0.2142, -0.8286, -0.5171,
+-0.05226, -0.646716, -0.262731, 0.78125, 0.125, -0.0757, -0.9217, -0.3804,
+-0.102513, -0.646716, -0.247487, 0.8125, 0.125, -0.1484, -0.9217, -0.3583,
+-0.262731, 0.136563, -0.634289, 0.8125, 0.5625, -0.3754, 0.1939, -0.9063,
+-0.126168, 0.267878, -0.634289, 0.78125, 0.625, -0.1804, 0.3805, -0.907,
+-0.133939, 0.136563, -0.673357, 0.78125, 0.5625, -0.1914, 0.1939, -0.9622,
+-0.05226, -0.68655, -0.126168, 0.8125, 0.0625, -0.0769, -0.9796, -0.1856,
+-0.05226, -0.646716, -0.262731, 0.78125, 0.125, -0.0757, -0.9217, -0.3804,
+-0.026642, -0.68655, -0.133939, 0.78125, 0.0625, -0.0392, -0.9796, -0.1971,
+-0.262731, 0.136563, -0.634289, 0.8125, 0.5625, -0.3754, 0.1939, -0.9063,
+-0.136563, 0, -0.686549, 0.78125, 0.5, -0.1951, 0, -0.9808,
+-0.267878, 0, -0.646715, 0.8125, 0.5, -0.3827, 0, -0.9239,
+-0.05226, 0.68655, -0.126168, 0.8125, 0.9375, -0.0769, 0.9796, -0.1856,
+ 0, 0.7, 0, 0.796875, 1, 0, 1, 0,
+-0.026642, 0.68655, -0.133939, 0.78125, 0.9375, -0.0392, 0.9796, -0.1971,
+ 0, -0.7, 0, 0.796875, 0, 0, -1, 0,
+-0.05226, -0.68655, -0.126168, 0.8125, 0.0625, -0.0769, -0.9796, -0.1856,
+-0.026642, -0.68655, -0.133939, 0.78125, 0.0625, -0.0392, -0.9796, -0.1971,
+-0.267878, 0, -0.646715, 0.8125, 0.5, -0.3827, 0, -0.9239,
+-0.133939, -0.136563, -0.673357, 0.78125, 0.4375, -0.1914, -0.1939, -0.9622,
+-0.262731, -0.136563, -0.634289, 0.8125, 0.4375, -0.3754, -0.1939, -0.9063,
+-0.05226, 0.68655, -0.126168, 0.8125, 0.9375, -0.0769, 0.9796, -0.1856,
+-0.05226, 0.646716, -0.262731, 0.78125, 0.875, -0.0757, 0.9217, -0.3804,
+-0.102513, 0.646716, -0.247487, 0.8125, 0.875, -0.1484, 0.9217, -0.3583,
+-0.262731, -0.136563, -0.634289, 0.8125, 0.4375, -0.3754, -0.1939, -0.9063,
+-0.126168, -0.267878, -0.634289, 0.78125, 0.375, -0.1804, -0.3805, -0.907,
+-0.247487, -0.267878, -0.597487, 0.8125, 0.375, -0.3539, -0.3805, -0.8544,
+-0.102513, 0.646716, -0.247487, 0.8125, 0.875, -0.1484, 0.9217, -0.3583,
+-0.07587, 0.582029, -0.381426, 0.78125, 0.8125, -0.1092, 0.8286, -0.549,
+-0.148825, 0.582029, -0.359296, 0.8125, 0.8125, -0.2142, 0.8286, -0.5171,
+-0.222732, -0.388899, -0.537724, 0.8125, 0.3125, -0.3189, -0.5528, -0.7699,
+-0.126168, -0.267878, -0.634289, 0.78125, 0.375, -0.1804, -0.3805, -0.907,
+-0.113548, -0.388899, -0.570845, 0.78125, 0.3125, -0.1626, -0.5528, -0.8173,
+-0.148825, 0.582029, -0.359296, 0.8125, 0.8125, -0.2142, 0.8286, -0.5171,
+-0.096565, 0.494975, -0.485464, 0.78125, 0.75, -0.1385, 0.704, -0.6965,
+-0.189419, 0.494975, -0.457297, 0.8125, 0.75, -0.2717, 0.704, -0.6561,
+-0.222732, -0.388899, -0.537724, 0.8125, 0.3125, -0.3189, -0.5528, -0.7699,
+-0.096565, -0.494975, -0.485464, 0.78125, 0.25, -0.1385, -0.704, -0.6965,
+-0.189419, -0.494975, -0.457297, 0.8125, 0.25, -0.2717, -0.704, -0.6561,
+-0.222732, 0.388899, -0.537724, 0.8125, 0.6875, -0.3189, 0.5528, -0.7699,
+-0.096565, 0.494975, -0.485464, 0.78125, 0.75, -0.1385, 0.704, -0.6965,
+-0.113548, 0.388899, -0.570845, 0.78125, 0.6875, -0.1626, 0.5528, -0.8173,
+-0.05226, 0.646716, -0.262731, 0.78125, 0.875, -0.0757, 0.9217, -0.3804,
+ 0, 0.68655, -0.136563, 0.75, 0.9375, 0, 0.9796, -0.201,
+ 0, 0.646716, -0.267878, 0.75, 0.875, 0, 0.9217, -0.3879,
+-0.133939, -0.136563, -0.673357, 0.78125, 0.4375, -0.1914, -0.1939, -0.9622,
+ 0, -0.267878, -0.646715, 0.75, 0.375, 0, -0.3805, -0.9247,
+-0.126168, -0.267878, -0.634289, 0.78125, 0.375, -0.1804, -0.3805, -0.907,
+-0.07587, 0.582029, -0.381426, 0.78125, 0.8125, -0.1092, 0.8286, -0.549,
+ 0, 0.646716, -0.267878, 0.75, 0.875, 0, 0.9217, -0.3879,
+ 0, 0.582029, -0.388899, 0.75, 0.8125, 0, 0.8286, -0.5598,
+-0.113548, -0.388899, -0.570845, 0.78125, 0.3125, -0.1626, -0.5528, -0.8173,
+ 0, -0.267878, -0.646715, 0.75, 0.375, 0, -0.3805, -0.9247,
+ 0, -0.388899, -0.582028, 0.75, 0.3125, 0, -0.5528, -0.8333,
+-0.096565, 0.494975, -0.485464, 0.78125, 0.75, -0.1385, 0.704, -0.6965,
+ 0, 0.582029, -0.388899, 0.75, 0.8125, 0, 0.8286, -0.5598,
+ 0, 0.494975, -0.494975, 0.75, 0.75, 0, 0.704, -0.7101,
+-0.113548, -0.388899, -0.570845, 0.78125, 0.3125, -0.1626, -0.5528, -0.8173,
+ 0, -0.494975, -0.494974, 0.75, 0.25, 0, -0.704, -0.7101,
+-0.096565, -0.494975, -0.485464, 0.78125, 0.25, -0.1385, -0.704, -0.6965,
+-0.113548, 0.388899, -0.570845, 0.78125, 0.6875, -0.1626, 0.5528, -0.8173,
+ 0, 0.494975, -0.494975, 0.75, 0.75, 0, 0.704, -0.7101,
+ 0, 0.388899, -0.582029, 0.75, 0.6875, 0, 0.5528, -0.8333,
+-0.096565, -0.494975, -0.485464, 0.78125, 0.25, -0.1385, -0.704, -0.6965,
+ 0, -0.582029, -0.388899, 0.75, 0.1875, 0, -0.8286, -0.5598,
+-0.07587, -0.582029, -0.381426, 0.78125, 0.1875, -0.1092, -0.8286, -0.549,
+-0.126168, 0.267878, -0.634289, 0.78125, 0.625, -0.1804, 0.3805, -0.907,
+ 0, 0.388899, -0.582029, 0.75, 0.6875, 0, 0.5528, -0.8333,
+ 0, 0.267878, -0.646716, 0.75, 0.625, 0, 0.3805, -0.9247,
+-0.07587, -0.582029, -0.381426, 0.78125, 0.1875, -0.1092, -0.8286, -0.549,
+ 0, -0.646716, -0.267878, 0.75, 0.125, 0, -0.9217, -0.3879,
+-0.05226, -0.646716, -0.262731, 0.78125, 0.125, -0.0757, -0.9217, -0.3804,
+-0.133939, 0.136563, -0.673357, 0.78125, 0.5625, -0.1914, 0.1939, -0.9622,
+ 0, 0.267878, -0.646716, 0.75, 0.625, 0, 0.3805, -0.9247,
+ 0, 0.136563, -0.68655, 0.75, 0.5625, 0, 0.1939, -0.981,
+-0.05226, -0.646716, -0.262731, 0.78125, 0.125, -0.0757, -0.9217, -0.3804,
+ 0, -0.68655, -0.136563, 0.75, 0.0625, 0, -0.9796, -0.201,
+-0.026642, -0.68655, -0.133939, 0.78125, 0.0625, -0.0392, -0.9796, -0.1971,
+-0.136563, 0, -0.686549, 0.78125, 0.5, -0.1951, 0, -0.9808,
+ 0, 0.136563, -0.68655, 0.75, 0.5625, 0, 0.1939, -0.981,
+ 0, 0, -0.7, 0.75, 0.5, 0, 0, -1,
+-0.026642, 0.68655, -0.133939, 0.78125, 0.9375, -0.0392, 0.9796, -0.1971,
+ 0, 0.7, 0, 0.765625, 1, 0, 1, 0,
+ 0, 0.68655, -0.136563, 0.75, 0.9375, 0, 0.9796, -0.201,
+ 0, -0.7, 0, 0.765625, 0, 0, -1, 0,
+-0.026642, -0.68655, -0.133939, 0.78125, 0.0625, -0.0392, -0.9796, -0.1971,
+ 0, -0.68655, -0.136563, 0.75, 0.0625, 0, -0.9796, -0.201,
+-0.136563, 0, -0.686549, 0.78125, 0.5, -0.1951, 0, -0.9808,
+ 0, -0.136563, -0.68655, 0.75, 0.4375, 0, -0.1939, -0.981,
+-0.133939, -0.136563, -0.673357, 0.78125, 0.4375, -0.1914, -0.1939, -0.9622,
+ 0, 0, -0.7, 0.75, 0.5, 0, 0, -1,
+0.136563, 0, -0.68655, 0.71875, 0.5, 0.1951, 0, -0.9808,
+0.133939, -0.136563, -0.673358, 0.71875, 0.4375, 0.1914, -0.1939, -0.9622,
+ 0, 0.68655, -0.136563, 0.75, 0.9375, 0, 0.9796, -0.201,
+0.026642, 0.68655, -0.133939, 0.71875, 0.9375, 0.0392, 0.9796, -0.1971,
+0.052261, 0.646716, -0.262731, 0.71875, 0.875, 0.0757, 0.9217, -0.3804,
+ 0, -0.136563, -0.68655, 0.75, 0.4375, 0, -0.1939, -0.981,
+0.133939, -0.136563, -0.673358, 0.71875, 0.4375, 0.1914, -0.1939, -0.9622,
+0.126168, -0.267878, -0.634289, 0.71875, 0.375, 0.1804, -0.3805, -0.907,
+ 0, 0.582029, -0.388899, 0.75, 0.8125, 0, 0.8286, -0.5598,
+ 0, 0.646716, -0.267878, 0.75, 0.875, 0, 0.9217, -0.3879,
+0.052261, 0.646716, -0.262731, 0.71875, 0.875, 0.0757, 0.9217, -0.3804,
+ 0, -0.267878, -0.646715, 0.75, 0.375, 0, -0.3805, -0.9247,
+0.126168, -0.267878, -0.634289, 0.71875, 0.375, 0.1804, -0.3805, -0.907,
+0.113548, -0.388899, -0.570845, 0.71875, 0.3125, 0.1626, -0.5528, -0.8173,
+ 0, 0.582029, -0.388899, 0.75, 0.8125, 0, 0.8286, -0.5598,
+0.075871, 0.582029, -0.381427, 0.71875, 0.8125, 0.1092, 0.8286, -0.549,
+0.096565, 0.494975, -0.485464, 0.71875, 0.75, 0.1385, 0.704, -0.6965,
+ 0, -0.388899, -0.582028, 0.75, 0.3125, 0, -0.5528, -0.8333,
+0.113548, -0.388899, -0.570845, 0.71875, 0.3125, 0.1626, -0.5528, -0.8173,
+0.096565, -0.494975, -0.485464, 0.71875, 0.25, 0.1385, -0.704, -0.6965,
+ 0, 0.494975, -0.494975, 0.75, 0.75, 0, 0.704, -0.7101,
+0.096565, 0.494975, -0.485464, 0.71875, 0.75, 0.1385, 0.704, -0.6965,
+0.113548, 0.388899, -0.570845, 0.71875, 0.6875, 0.1626, 0.5528, -0.8173,
+ 0, -0.494975, -0.494974, 0.75, 0.25, 0, -0.704, -0.7101,
+0.096565, -0.494975, -0.485464, 0.71875, 0.25, 0.1385, -0.704, -0.6965,
+0.075871, -0.582029, -0.381427, 0.71875, 0.1875, 0.1092, -0.8286, -0.549,
+ 0, 0.388899, -0.582029, 0.75, 0.6875, 0, 0.5528, -0.8333,
+0.113548, 0.388899, -0.570845, 0.71875, 0.6875, 0.1626, 0.5528, -0.8173,
+0.126168, 0.267878, -0.634289, 0.71875, 0.625, 0.1804, 0.3805, -0.907,
+ 0, -0.582029, -0.388899, 0.75, 0.1875, 0, -0.8286, -0.5598,
+0.075871, -0.582029, -0.381427, 0.71875, 0.1875, 0.1092, -0.8286, -0.549,
+0.052261, -0.646716, -0.262731, 0.71875, 0.125, 0.0757, -0.9217, -0.3804,
+ 0, 0.267878, -0.646716, 0.75, 0.625, 0, 0.3805, -0.9247,
+0.126168, 0.267878, -0.634289, 0.71875, 0.625, 0.1804, 0.3805, -0.907,
+0.133939, 0.136563, -0.673358, 0.71875, 0.5625, 0.1914, 0.1939, -0.9622,
+ 0, -0.646716, -0.267878, 0.75, 0.125, 0, -0.9217, -0.3879,
+0.052261, -0.646716, -0.262731, 0.71875, 0.125, 0.0757, -0.9217, -0.3804,
+0.026642, -0.68655, -0.133939, 0.71875, 0.0625, 0.0392, -0.9796, -0.1971,
+ 0, 0.136563, -0.68655, 0.75, 0.5625, 0, 0.1939, -0.981,
+0.133939, 0.136563, -0.673358, 0.71875, 0.5625, 0.1914, 0.1939, -0.9622,
+0.136563, 0, -0.68655, 0.71875, 0.5, 0.1951, 0, -0.9808,
+0.052261, -0.646716, -0.262731, 0.71875, 0.125, 0.0757, -0.9217, -0.3804,
+0.102513, -0.646716, -0.247487, 0.6875, 0.125, 0.1484, -0.9217, -0.3583,
+0.052261, -0.68655, -0.126168, 0.6875, 0.0625, 0.0769, -0.9796, -0.1856,
+0.133939, 0.136563, -0.673358, 0.71875, 0.5625, 0.1914, 0.1939, -0.9622,
+0.262731, 0.136563, -0.634289, 0.6875, 0.5625, 0.3754, 0.1939, -0.9063,
+0.267878, 0, -0.646716, 0.6875, 0.5, 0.3827, 0, -0.9239,
+0.133939, -0.136563, -0.673358, 0.71875, 0.4375, 0.1914, -0.1939, -0.9622,
+0.136563, 0, -0.68655, 0.71875, 0.5, 0.1951, 0, -0.9808,
+0.267878, 0, -0.646716, 0.6875, 0.5, 0.3827, 0, -0.9239,
+0.026642, 0.68655, -0.133939, 0.71875, 0.9375, 0.0392, 0.9796, -0.1971,
+0.052261, 0.68655, -0.126168, 0.6875, 0.9375, 0.0769, 0.9796, -0.1856,
+0.102513, 0.646716, -0.247487, 0.6875, 0.875, 0.1484, 0.9217, -0.3583,
+0.126168, -0.267878, -0.634289, 0.71875, 0.375, 0.1804, -0.3805, -0.907,
+0.133939, -0.136563, -0.673358, 0.71875, 0.4375, 0.1914, -0.1939, -0.9622,
+0.262731, -0.136563, -0.634289, 0.6875, 0.4375, 0.3754, -0.1939, -0.9063,
+0.052261, 0.646716, -0.262731, 0.71875, 0.875, 0.0757, 0.9217, -0.3804,
+0.102513, 0.646716, -0.247487, 0.6875, 0.875, 0.1484, 0.9217, -0.3583,
+0.148825, 0.582029, -0.359296, 0.6875, 0.8125, 0.2142, 0.8286, -0.5171,
+0.126168, -0.267878, -0.634289, 0.71875, 0.375, 0.1804, -0.3805, -0.907,
+0.247487, -0.267878, -0.597487, 0.6875, 0.375, 0.3539, -0.3805, -0.8544,
+0.222733, -0.388899, -0.537724, 0.6875, 0.3125, 0.3189, -0.5528, -0.7699,
+0.075871, 0.582029, -0.381427, 0.71875, 0.8125, 0.1092, 0.8286, -0.549,
+0.148825, 0.582029, -0.359296, 0.6875, 0.8125, 0.2142, 0.8286, -0.5171,
+0.189419, 0.494975, -0.457297, 0.6875, 0.75, 0.2717, 0.704, -0.6561,
+0.096565, -0.494975, -0.485464, 0.71875, 0.25, 0.1385, -0.704, -0.6965,
+0.113548, -0.388899, -0.570845, 0.71875, 0.3125, 0.1626, -0.5528, -0.8173,
+0.222733, -0.388899, -0.537724, 0.6875, 0.3125, 0.3189, -0.5528, -0.7699,
+0.096565, 0.494975, -0.485464, 0.71875, 0.75, 0.1385, 0.704, -0.6965,
+0.189419, 0.494975, -0.457297, 0.6875, 0.75, 0.2717, 0.704, -0.6561,
+0.222733, 0.388899, -0.537724, 0.6875, 0.6875, 0.3189, 0.5528, -0.7699,
+0.096565, -0.494975, -0.485464, 0.71875, 0.25, 0.1385, -0.704, -0.6965,
+0.189419, -0.494975, -0.457297, 0.6875, 0.25, 0.2717, -0.704, -0.6561,
+0.148825, -0.582029, -0.359296, 0.6875, 0.1875, 0.2142, -0.8286, -0.5171,
+0.113548, 0.388899, -0.570845, 0.71875, 0.6875, 0.1626, 0.5528, -0.8173,
+0.222733, 0.388899, -0.537724, 0.6875, 0.6875, 0.3189, 0.5528, -0.7699,
+0.247487, 0.267878, -0.597487, 0.6875, 0.625, 0.3539, 0.3805, -0.8544,
+0.075871, -0.582029, -0.381427, 0.71875, 0.1875, 0.1092, -0.8286, -0.549,
+0.148825, -0.582029, -0.359296, 0.6875, 0.1875, 0.2142, -0.8286, -0.5171,
+0.102513, -0.646716, -0.247487, 0.6875, 0.125, 0.1484, -0.9217, -0.3583,
+0.126168, 0.267878, -0.634289, 0.71875, 0.625, 0.1804, 0.3805, -0.907,
+0.247487, 0.267878, -0.597487, 0.6875, 0.625, 0.3539, 0.3805, -0.8544,
+0.262731, 0.136563, -0.634289, 0.6875, 0.5625, 0.3754, 0.1939, -0.9063,
+0.189419, -0.494975, -0.457297, 0.6875, 0.25, 0.2717, -0.704, -0.6561,
+0.222733, -0.388899, -0.537724, 0.6875, 0.3125, 0.3189, -0.5528, -0.7699,
+0.323358, -0.388899, -0.483939, 0.65625, 0.3125, 0.463, -0.5528, -0.6929,
+0.189419, 0.494975, -0.457297, 0.6875, 0.75, 0.2717, 0.704, -0.6561,
+0.274993, 0.494975, -0.411556, 0.65625, 0.75, 0.3945, 0.704, -0.5904,
+0.323358, 0.388899, -0.483939, 0.65625, 0.6875, 0.463, 0.5528, -0.6929,
+0.189419, -0.494975, -0.457297, 0.6875, 0.25, 0.2717, -0.704, -0.6561,
+0.274993, -0.494975, -0.411556, 0.65625, 0.25, 0.3945, -0.704, -0.5904,
+0.216061, -0.582029, -0.323358, 0.65625, 0.1875, 0.311, -0.8286, -0.4654,
+0.222733, 0.388899, -0.537724, 0.6875, 0.6875, 0.3189, 0.5528, -0.7699,
+0.323358, 0.388899, -0.483939, 0.65625, 0.6875, 0.463, 0.5528, -0.6929,
+0.359296, 0.267878, -0.537724, 0.65625, 0.625, 0.5137, 0.3805, -0.7689,
+0.148825, -0.582029, -0.359296, 0.6875, 0.1875, 0.2142, -0.8286, -0.5171,
+0.216061, -0.582029, -0.323358, 0.65625, 0.1875, 0.311, -0.8286, -0.4654,
+0.148825, -0.646716, -0.222733, 0.65625, 0.125, 0.2155, -0.9217, -0.3225,
+0.262731, 0.136563, -0.634289, 0.6875, 0.5625, 0.3754, 0.1939, -0.9063,
+0.247487, 0.267878, -0.597487, 0.6875, 0.625, 0.3539, 0.3805, -0.8544,
+0.359296, 0.267878, -0.537724, 0.65625, 0.625, 0.5137, 0.3805, -0.7689,
+0.102513, -0.646716, -0.247487, 0.6875, 0.125, 0.1484, -0.9217, -0.3583,
+0.148825, -0.646716, -0.222733, 0.65625, 0.125, 0.2155, -0.9217, -0.3225,
+0.07587, -0.68655, -0.113548, 0.65625, 0.0625, 0.1116, -0.9796, -0.1671,
+0.262731, 0.136563, -0.634289, 0.6875, 0.5625, 0.3754, 0.1939, -0.9063,
+0.381427, 0.136563, -0.570845, 0.65625, 0.5625, 0.545, 0.1939, -0.8157,
+0.388899, 0, -0.582029, 0.65625, 0.5, 0.5556, 0, -0.8314,
+0.267878, 0, -0.646716, 0.6875, 0.5, 0.3827, 0, -0.9239,
+0.388899, 0, -0.582029, 0.65625, 0.5, 0.5556, 0, -0.8314,
+0.381427, -0.136563, -0.570845, 0.65625, 0.4375, 0.545, -0.1939, -0.8157,
+0.052261, 0.68655, -0.126168, 0.6875, 0.9375, 0.0769, 0.9796, -0.1856,
+0.075871, 0.68655, -0.113548, 0.65625, 0.9375, 0.1116, 0.9796, -0.1671,
+0.148825, 0.646716, -0.222733, 0.65625, 0.875, 0.2155, 0.9217, -0.3225,
+0.262731, -0.136563, -0.634289, 0.6875, 0.4375, 0.3754, -0.1939, -0.9063,
+0.381427, -0.136563, -0.570845, 0.65625, 0.4375, 0.545, -0.1939, -0.8157,
+0.359296, -0.267878, -0.537724, 0.65625, 0.375, 0.5137, -0.3805, -0.7689,
+0.102513, 0.646716, -0.247487, 0.6875, 0.875, 0.1484, 0.9217, -0.3583,
+0.148825, 0.646716, -0.222733, 0.65625, 0.875, 0.2155, 0.9217, -0.3225,
+0.216061, 0.582029, -0.323358, 0.65625, 0.8125, 0.311, 0.8286, -0.4654,
+0.222733, -0.388899, -0.537724, 0.6875, 0.3125, 0.3189, -0.5528, -0.7699,
+0.247487, -0.267878, -0.597487, 0.6875, 0.375, 0.3539, -0.3805, -0.8544,
+0.359296, -0.267878, -0.537724, 0.65625, 0.375, 0.5137, -0.3805, -0.7689,
+0.148825, 0.582029, -0.359296, 0.6875, 0.8125, 0.2142, 0.8286, -0.5171,
+0.216061, 0.582029, -0.323358, 0.65625, 0.8125, 0.311, 0.8286, -0.4654,
+0.274993, 0.494975, -0.411556, 0.65625, 0.75, 0.3945, 0.704, -0.5904,
+0.388899, 0, -0.582029, 0.65625, 0.5, 0.5556, 0, -0.8314,
+0.494975, 0, -0.494975, 0.625, 0.5, 0.7071, 0, -0.7071,
+0.485464, -0.136563, -0.485464, 0.625, 0.4375, 0.6937, -0.1939, -0.6937,
+0.075871, 0.68655, -0.113548, 0.65625, 0.9375, 0.1116, 0.9796, -0.1671,
+0.096565, 0.68655, -0.096565, 0.625, 0.9375, 0.1421, 0.9796, -0.1421,
+0.189419, 0.646716, -0.189419, 0.625, 0.875, 0.2743, 0.9217, -0.2743,
+0.381427, -0.136563, -0.570845, 0.65625, 0.4375, 0.545, -0.1939, -0.8157,
+0.485464, -0.136563, -0.485464, 0.625, 0.4375, 0.6937, -0.1939, -0.6937,
+0.457297, -0.267878, -0.457297, 0.625, 0.375, 0.6539, -0.3805, -0.6539,
+0.148825, 0.646716, -0.222733, 0.65625, 0.875, 0.2155, 0.9217, -0.3225,
+0.189419, 0.646716, -0.189419, 0.625, 0.875, 0.2743, 0.9217, -0.2743,
+0.274993, 0.582029, -0.274993, 0.625, 0.8125, 0.3958, 0.8286, -0.3958,
+0.323358, -0.388899, -0.483939, 0.65625, 0.3125, 0.463, -0.5528, -0.6929,
+0.359296, -0.267878, -0.537724, 0.65625, 0.375, 0.5137, -0.3805, -0.7689,
+0.457297, -0.267878, -0.457297, 0.625, 0.375, 0.6539, -0.3805, -0.6539,
+0.216061, 0.582029, -0.323358, 0.65625, 0.8125, 0.311, 0.8286, -0.4654,
+0.274993, 0.582029, -0.274993, 0.625, 0.8125, 0.3958, 0.8286, -0.3958,
+0.35, 0.494975, -0.35, 0.625, 0.75, 0.5021, 0.704, -0.5021,
+0.323358, -0.388899, -0.483939, 0.65625, 0.3125, 0.463, -0.5528, -0.6929,
+0.411557, -0.388899, -0.411556, 0.625, 0.3125, 0.5893, -0.5528, -0.5893,
+0.35, -0.494975, -0.35, 0.625, 0.25, 0.5021, -0.704, -0.5021,
+0.274993, 0.494975, -0.411556, 0.65625, 0.75, 0.3945, 0.704, -0.5904,
+0.35, 0.494975, -0.35, 0.625, 0.75, 0.5021, 0.704, -0.5021,
+0.411557, 0.388899, -0.411556, 0.625, 0.6875, 0.5893, 0.5528, -0.5893,
+0.274993, -0.494975, -0.411556, 0.65625, 0.25, 0.3945, -0.704, -0.5904,
+0.35, -0.494975, -0.35, 0.625, 0.25, 0.5021, -0.704, -0.5021,
+0.274993, -0.582029, -0.274993, 0.625, 0.1875, 0.3958, -0.8286, -0.3958,
+0.323358, 0.388899, -0.483939, 0.65625, 0.6875, 0.463, 0.5528, -0.6929,
+0.411557, 0.388899, -0.411556, 0.625, 0.6875, 0.5893, 0.5528, -0.5893,
+0.457297, 0.267878, -0.457297, 0.625, 0.625, 0.6539, 0.3805, -0.6539,
+0.216061, -0.582029, -0.323358, 0.65625, 0.1875, 0.311, -0.8286, -0.4654,
+0.274993, -0.582029, -0.274993, 0.625, 0.1875, 0.3958, -0.8286, -0.3958,
+0.189419, -0.646716, -0.189419, 0.625, 0.125, 0.2743, -0.9217, -0.2743,
+0.359296, 0.267878, -0.537724, 0.65625, 0.625, 0.5137, 0.3805, -0.7689,
+0.457297, 0.267878, -0.457297, 0.625, 0.625, 0.6539, 0.3805, -0.6539,
+0.485464, 0.136563, -0.485464, 0.625, 0.5625, 0.6937, 0.1939, -0.6937,
+0.148825, -0.646716, -0.222733, 0.65625, 0.125, 0.2155, -0.9217, -0.3225,
+0.189419, -0.646716, -0.189419, 0.625, 0.125, 0.2743, -0.9217, -0.2743,
+0.096565, -0.68655, -0.096565, 0.625, 0.0625, 0.1421, -0.9796, -0.1421,
+0.388899, 0, -0.582029, 0.65625, 0.5, 0.5556, 0, -0.8314,
+0.381427, 0.136563, -0.570845, 0.65625, 0.5625, 0.545, 0.1939, -0.8157,
+0.485464, 0.136563, -0.485464, 0.625, 0.5625, 0.6937, 0.1939, -0.6937,
+0.411557, 0.388899, -0.411556, 0.625, 0.6875, 0.5893, 0.5528, -0.5893,
+0.35, 0.494975, -0.35, 0.625, 0.75, 0.5021, 0.704, -0.5021,
+0.411557, 0.494975, -0.274993, 0.59375, 0.75, 0.5904, 0.704, -0.3945,
+0.274993, -0.582029, -0.274993, 0.625, 0.1875, 0.3958, -0.8286, -0.3958,
+0.35, -0.494975, -0.35, 0.625, 0.25, 0.5021, -0.704, -0.5021,
+0.411557, -0.494975, -0.274993, 0.59375, 0.25, 0.5904, -0.704, -0.3945,
+0.411557, 0.388899, -0.411556, 0.625, 0.6875, 0.5893, 0.5528, -0.5893,
+0.483939, 0.388899, -0.323358, 0.59375, 0.6875, 0.6929, 0.5528, -0.463,
+0.537725, 0.267878, -0.359296, 0.59375, 0.625, 0.7689, 0.3805, -0.5137,
+0.189419, -0.646716, -0.189419, 0.625, 0.125, 0.2743, -0.9217, -0.2743,
+0.274993, -0.582029, -0.274993, 0.625, 0.1875, 0.3958, -0.8286, -0.3958,
+0.323358, -0.582029, -0.216061, 0.59375, 0.1875, 0.4654, -0.8286, -0.311,
+0.457297, 0.267878, -0.457297, 0.625, 0.625, 0.6539, 0.3805, -0.6539,
+0.537725, 0.267878, -0.359296, 0.59375, 0.625, 0.7689, 0.3805, -0.5137,
+0.570845, 0.136563, -0.381426, 0.59375, 0.5625, 0.8157, 0.1939, -0.545,
+0.189419, -0.646716, -0.189419, 0.625, 0.125, 0.2743, -0.9217, -0.2743,
+0.222733, -0.646716, -0.148825, 0.59375, 0.125, 0.3225, -0.9217, -0.2155,
+0.113548, -0.68655, -0.07587, 0.59375, 0.0625, 0.1671, -0.9796, -0.1116,
+0.494975, 0, -0.494975, 0.625, 0.5, 0.7071, 0, -0.7071,
+0.485464, 0.136563, -0.485464, 0.625, 0.5625, 0.6937, 0.1939, -0.6937,
+0.570845, 0.136563, -0.381426, 0.59375, 0.5625, 0.8157, 0.1939, -0.545,
+0.494975, 0, -0.494975, 0.625, 0.5, 0.7071, 0, -0.7071,
+0.582029, 0, -0.388899, 0.59375, 0.5, 0.8314, 0, -0.5556,
+0.570845, -0.136563, -0.381426, 0.59375, 0.4375, 0.8157, -0.1939, -0.545,
+0.096565, 0.68655, -0.096565, 0.625, 0.9375, 0.1421, 0.9796, -0.1421,
+0.113548, 0.68655, -0.07587, 0.59375, 0.9375, 0.1671, 0.9796, -0.1116,
+0.222733, 0.646716, -0.148825, 0.59375, 0.875, 0.3225, 0.9217, -0.2155,
+0.485464, -0.136563, -0.485464, 0.625, 0.4375, 0.6937, -0.1939, -0.6937,
+0.570845, -0.136563, -0.381426, 0.59375, 0.4375, 0.8157, -0.1939, -0.545,
+0.537725, -0.267878, -0.359296, 0.59375, 0.375, 0.7689, -0.3805, -0.5137,
+0.189419, 0.646716, -0.189419, 0.625, 0.875, 0.2743, 0.9217, -0.2743,
+0.222733, 0.646716, -0.148825, 0.59375, 0.875, 0.3225, 0.9217, -0.2155,
+0.323358, 0.582029, -0.216061, 0.59375, 0.8125, 0.4654, 0.8286, -0.311,
+0.411557, -0.388899, -0.411556, 0.625, 0.3125, 0.5893, -0.5528, -0.5893,
+0.457297, -0.267878, -0.457297, 0.625, 0.375, 0.6539, -0.3805, -0.6539,
+0.537725, -0.267878, -0.359296, 0.59375, 0.375, 0.7689, -0.3805, -0.5137,
+0.274993, 0.582029, -0.274993, 0.625, 0.8125, 0.3958, 0.8286, -0.3958,
+0.323358, 0.582029, -0.216061, 0.59375, 0.8125, 0.4654, 0.8286, -0.311,
+0.411557, 0.494975, -0.274993, 0.59375, 0.75, 0.5904, 0.704, -0.3945,
+0.411557, -0.388899, -0.411556, 0.625, 0.3125, 0.5893, -0.5528, -0.5893,
+0.483939, -0.388899, -0.323358, 0.59375, 0.3125, 0.6929, -0.5528, -0.463,
+0.411557, -0.494975, -0.274993, 0.59375, 0.25, 0.5904, -0.704, -0.3945,
+0.582029, 0, -0.388899, 0.59375, 0.5, 0.8314, 0, -0.5556,
+0.646716, 0, -0.267878, 0.5625, 0.5, 0.9239, 0, -0.3827,
+0.634289, -0.136563, -0.262731, 0.5625, 0.4375, 0.9063, -0.1939, -0.3754,
+0.113548, 0.68655, -0.07587, 0.59375, 0.9375, 0.1671, 0.9796, -0.1116,
+0.126168, 0.68655, -0.05226, 0.5625, 0.9375, 0.1856, 0.9796, -0.0769,
+0.247488, 0.646716, -0.102512, 0.5625, 0.875, 0.3583, 0.9217, -0.1484,
+0.570845, -0.136563, -0.381426, 0.59375, 0.4375, 0.8157, -0.1939, -0.545,
+0.634289, -0.136563, -0.262731, 0.5625, 0.4375, 0.9063, -0.1939, -0.3754,
+0.597487, -0.267878, -0.247487, 0.5625, 0.375, 0.8544, -0.3805, -0.3539,
+0.222733, 0.646716, -0.148825, 0.59375, 0.875, 0.3225, 0.9217, -0.2155,
+0.247488, 0.646716, -0.102512, 0.5625, 0.875, 0.3583, 0.9217, -0.1484,
+0.359296, 0.582029, -0.148825, 0.5625, 0.8125, 0.5171, 0.8286, -0.2142,
+0.483939, -0.388899, -0.323358, 0.59375, 0.3125, 0.6929, -0.5528, -0.463,
+0.537725, -0.267878, -0.359296, 0.59375, 0.375, 0.7689, -0.3805, -0.5137,
+0.597487, -0.267878, -0.247487, 0.5625, 0.375, 0.8544, -0.3805, -0.3539,
+0.323358, 0.582029, -0.216061, 0.59375, 0.8125, 0.4654, 0.8286, -0.311,
+0.359296, 0.582029, -0.148825, 0.5625, 0.8125, 0.5171, 0.8286, -0.2142,
+0.457297, 0.494975, -0.189418, 0.5625, 0.75, 0.6561, 0.704, -0.2717,
+0.411557, -0.494975, -0.274993, 0.59375, 0.25, 0.5904, -0.704, -0.3945,
+0.483939, -0.388899, -0.323358, 0.59375, 0.3125, 0.6929, -0.5528, -0.463,
+0.537725, -0.388899, -0.222733, 0.5625, 0.3125, 0.7699, -0.5528, -0.3189,
+0.483939, 0.388899, -0.323358, 0.59375, 0.6875, 0.6929, 0.5528, -0.463,
+0.411557, 0.494975, -0.274993, 0.59375, 0.75, 0.5904, 0.704, -0.3945,
+0.457297, 0.494975, -0.189418, 0.5625, 0.75, 0.6561, 0.704, -0.2717,
+0.411557, -0.494975, -0.274993, 0.59375, 0.25, 0.5904, -0.704, -0.3945,
+0.457297, -0.494975, -0.189418, 0.5625, 0.25, 0.6561, -0.704, -0.2717,
+0.359296, -0.582029, -0.148825, 0.5625, 0.1875, 0.5171, -0.8286, -0.2142,
+0.483939, 0.388899, -0.323358, 0.59375, 0.6875, 0.6929, 0.5528, -0.463,
+0.537725, 0.388899, -0.222733, 0.5625, 0.6875, 0.7699, 0.5528, -0.3189,
+0.597487, 0.267878, -0.247487, 0.5625, 0.625, 0.8544, 0.3805, -0.3539,
+0.222733, -0.646716, -0.148825, 0.59375, 0.125, 0.3225, -0.9217, -0.2155,
+0.323358, -0.582029, -0.216061, 0.59375, 0.1875, 0.4654, -0.8286, -0.311,
+0.359296, -0.582029, -0.148825, 0.5625, 0.1875, 0.5171, -0.8286, -0.2142,
+0.570845, 0.136563, -0.381426, 0.59375, 0.5625, 0.8157, 0.1939, -0.545,
+0.537725, 0.267878, -0.359296, 0.59375, 0.625, 0.7689, 0.3805, -0.5137,
+0.597487, 0.267878, -0.247487, 0.5625, 0.625, 0.8544, 0.3805, -0.3539,
+0.222733, -0.646716, -0.148825, 0.59375, 0.125, 0.3225, -0.9217, -0.2155,
+0.247487, -0.646716, -0.102512, 0.5625, 0.125, 0.3583, -0.9217, -0.1484,
+0.126168, -0.68655, -0.05226, 0.5625, 0.0625, 0.1856, -0.9796, -0.0769,
+0.570845, 0.136563, -0.381426, 0.59375, 0.5625, 0.8157, 0.1939, -0.545,
+0.634289, 0.136563, -0.262731, 0.5625, 0.5625, 0.9063, 0.1939, -0.3754,
+0.646716, 0, -0.267878, 0.5625, 0.5, 0.9239, 0, -0.3827,
+0.457297, -0.494975, -0.189418, 0.5625, 0.25, 0.6561, -0.704, -0.2717,
+0.485464, -0.494975, -0.096565, 0.53125, 0.25, 0.6965, -0.704, -0.1385,
+0.381427, -0.582029, -0.07587, 0.53125, 0.1875, 0.549, -0.8286, -0.1092,
+0.537725, 0.388899, -0.222733, 0.5625, 0.6875, 0.7699, 0.5528, -0.3189,
+0.570845, 0.388899, -0.113548, 0.53125, 0.6875, 0.8173, 0.5528, -0.1626,
+0.634289, 0.267878, -0.126168, 0.53125, 0.625, 0.907, 0.3805, -0.1804,
+0.359296, -0.582029, -0.148825, 0.5625, 0.1875, 0.5171, -0.8286, -0.2142,
+0.381427, -0.582029, -0.07587, 0.53125, 0.1875, 0.549, -0.8286, -0.1092,
+0.262731, -0.646716, -0.05226, 0.53125, 0.125, 0.3804, -0.9217, -0.0757,
+0.634289, 0.136563, -0.262731, 0.5625, 0.5625, 0.9063, 0.1939, -0.3754,
+0.597487, 0.267878, -0.247487, 0.5625, 0.625, 0.8544, 0.3805, -0.3539,
+0.634289, 0.267878, -0.126168, 0.53125, 0.625, 0.907, 0.3805, -0.1804,
+0.126168, -0.68655, -0.05226, 0.5625, 0.0625, 0.1856, -0.9796, -0.0769,
+0.247487, -0.646716, -0.102512, 0.5625, 0.125, 0.3583, -0.9217, -0.1484,
+0.262731, -0.646716, -0.05226, 0.53125, 0.125, 0.3804, -0.9217, -0.0757,
+0.634289, 0.136563, -0.262731, 0.5625, 0.5625, 0.9063, 0.1939, -0.3754,
+0.673358, 0.136563, -0.133939, 0.53125, 0.5625, 0.9622, 0.1939, -0.1914,
+0.68655, 0, -0.136563, 0.53125, 0.5, 0.9808, 0, -0.1951,
+0.646716, 0, -0.267878, 0.5625, 0.5, 0.9239, 0, -0.3827,
+0.68655, 0, -0.136563, 0.53125, 0.5, 0.9808, 0, -0.1951,
+0.673358, -0.136563, -0.133939, 0.53125, 0.4375, 0.9622, -0.1939, -0.1914,
+0.126168, 0.68655, -0.05226, 0.5625, 0.9375, 0.1856, 0.9796, -0.0769,
+0.133939, 0.68655, -0.026642, 0.53125, 0.9375, 0.1971, 0.9796, -0.0392,
+0.262731, 0.646716, -0.05226, 0.53125, 0.875, 0.3804, 0.9217, -0.0757,
+0.634289, -0.136563, -0.262731, 0.5625, 0.4375, 0.9063, -0.1939, -0.3754,
+0.673358, -0.136563, -0.133939, 0.53125, 0.4375, 0.9622, -0.1939, -0.1914,
+0.634289, -0.267878, -0.126168, 0.53125, 0.375, 0.907, -0.3805, -0.1804,
+0.247488, 0.646716, -0.102512, 0.5625, 0.875, 0.3583, 0.9217, -0.1484,
+0.262731, 0.646716, -0.05226, 0.53125, 0.875, 0.3804, 0.9217, -0.0757,
+0.381427, 0.582029, -0.07587, 0.53125, 0.8125, 0.549, 0.8286, -0.1092,
+0.537725, -0.388899, -0.222733, 0.5625, 0.3125, 0.7699, -0.5528, -0.3189,
+0.597487, -0.267878, -0.247487, 0.5625, 0.375, 0.8544, -0.3805, -0.3539,
+0.634289, -0.267878, -0.126168, 0.53125, 0.375, 0.907, -0.3805, -0.1804,
+0.457297, 0.494975, -0.189418, 0.5625, 0.75, 0.6561, 0.704, -0.2717,
+0.359296, 0.582029, -0.148825, 0.5625, 0.8125, 0.5171, 0.8286, -0.2142,
+0.381427, 0.582029, -0.07587, 0.53125, 0.8125, 0.549, 0.8286, -0.1092,
+0.457297, -0.494975, -0.189418, 0.5625, 0.25, 0.6561, -0.704, -0.2717,
+0.537725, -0.388899, -0.222733, 0.5625, 0.3125, 0.7699, -0.5528, -0.3189,
+0.570845, -0.388899, -0.113548, 0.53125, 0.3125, 0.8173, -0.5528, -0.1626,
+0.457297, 0.494975, -0.189418, 0.5625, 0.75, 0.6561, 0.704, -0.2717,
+0.485464, 0.494975, -0.096565, 0.53125, 0.75, 0.6965, 0.704, -0.1385,
+0.570845, 0.388899, -0.113548, 0.53125, 0.6875, 0.8173, 0.5528, -0.1626,
+0.133939, 0.68655, -0.026642, 0.53125, 0.9375, 0.1971, 0.9796, -0.0392,
+0.136563, 0.68655, 0, 0.5, 0.9375, 0.201, 0.9796, 0,
+0.267879, 0.646716, 0, 0.5, 0.875, 0.3879, 0.9217, 0,
+0.673358, -0.136563, -0.133939, 0.53125, 0.4375, 0.9622, -0.1939, -0.1914,
+0.68655, -0.136563, 0, 0.5, 0.4375, 0.981, -0.1939, 0,
+0.646716, -0.267878, 0, 0.5, 0.375, 0.9247, -0.3805, 0,
+0.262731, 0.646716, -0.05226, 0.53125, 0.875, 0.3804, 0.9217, -0.0757,
+0.267879, 0.646716, 0, 0.5, 0.875, 0.3879, 0.9217, 0,
+0.388899, 0.582029, 0, 0.5, 0.8125, 0.5598, 0.8286, 0,
+0.570845, -0.388899, -0.113548, 0.53125, 0.3125, 0.8173, -0.5528, -0.1626,
+0.634289, -0.267878, -0.126168, 0.53125, 0.375, 0.907, -0.3805, -0.1804,
+0.646716, -0.267878, 0, 0.5, 0.375, 0.9247, -0.3805, 0,
+0.381427, 0.582029, -0.07587, 0.53125, 0.8125, 0.549, 0.8286, -0.1092,
+0.388899, 0.582029, 0, 0.5, 0.8125, 0.5598, 0.8286, 0,
+0.494975, 0.494975, 0, 0.5, 0.75, 0.7101, 0.704, 0,
+0.570845, -0.388899, -0.113548, 0.53125, 0.3125, 0.8173, -0.5528, -0.1626,
+0.582029, -0.388899, 0, 0.5, 0.3125, 0.8333, -0.5528, 0,
+0.494975, -0.494975, 0, 0.5, 0.25, 0.7101, -0.704, 0,
+0.485464, 0.494975, -0.096565, 0.53125, 0.75, 0.6965, 0.704, -0.1385,
+0.494975, 0.494975, 0, 0.5, 0.75, 0.7101, 0.704, 0,
+0.582029, 0.388899, 0, 0.5, 0.6875, 0.8333, 0.5528, 0,
+0.381427, -0.582029, -0.07587, 0.53125, 0.1875, 0.549, -0.8286, -0.1092,
+0.485464, -0.494975, -0.096565, 0.53125, 0.25, 0.6965, -0.704, -0.1385,
+0.494975, -0.494975, 0, 0.5, 0.25, 0.7101, -0.704, 0,
+0.570845, 0.388899, -0.113548, 0.53125, 0.6875, 0.8173, 0.5528, -0.1626,
+0.582029, 0.388899, 0, 0.5, 0.6875, 0.8333, 0.5528, 0,
+0.646716, 0.267878, 0, 0.5, 0.625, 0.9247, 0.3805, 0,
+0.262731, -0.646716, -0.05226, 0.53125, 0.125, 0.3804, -0.9217, -0.0757,
+0.381427, -0.582029, -0.07587, 0.53125, 0.1875, 0.549, -0.8286, -0.1092,
+0.388899, -0.582029, 0, 0.5, 0.1875, 0.5598, -0.8286, 0,
+0.673358, 0.136563, -0.133939, 0.53125, 0.5625, 0.9622, 0.1939, -0.1914,
+0.634289, 0.267878, -0.126168, 0.53125, 0.625, 0.907, 0.3805, -0.1804,
+0.646716, 0.267878, 0, 0.5, 0.625, 0.9247, 0.3805, 0,
+0.133939, -0.68655, -0.026642, 0.53125, 0.0625, 0.1971, -0.9796, -0.0392,
+0.262731, -0.646716, -0.05226, 0.53125, 0.125, 0.3804, -0.9217, -0.0757,
+0.267878, -0.646716, 0, 0.5, 0.125, 0.3879, -0.9217, 0,
+0.673358, 0.136563, -0.133939, 0.53125, 0.5625, 0.9622, 0.1939, -0.1914,
+0.68655, 0.136563, 0, 0.5, 0.5625, 0.981, 0.1939, 0,
+0.7, 0, 0, 0.5, 0.5, 1, 0, 0,
+0.673358, -0.136563, -0.133939, 0.53125, 0.4375, 0.9622, -0.1939, -0.1914,
+0.68655, 0, -0.136563, 0.53125, 0.5, 0.9808, 0, -0.1951,
+0.7, 0, 0, 0.5, 0.5, 1, 0, 0,
+0.582029, 0.388899, 0, 0.5, 0.6875, 0.8333, 0.5528, 0,
+0.570845, 0.388899, 0.113548, 0.46875, 0.6875, 0.8173, 0.5528, 0.1626,
+0.634289, 0.267878, 0.126168, 0.46875, 0.625, 0.907, 0.3805, 0.1804,
+0.388899, -0.582029, 0, 0.5, 0.1875, 0.5598, -0.8286, 0,
+0.381427, -0.582029, 0.075871, 0.46875, 0.1875, 0.549, -0.8286, 0.1092,
+0.262731, -0.646716, 0.052261, 0.46875, 0.125, 0.3804, -0.9217, 0.0757,
+0.68655, 0.136563, 0, 0.5, 0.5625, 0.981, 0.1939, 0,
+0.646716, 0.267878, 0, 0.5, 0.625, 0.9247, 0.3805, 0,
+0.634289, 0.267878, 0.126168, 0.46875, 0.625, 0.907, 0.3805, 0.1804,
+0.136563, -0.68655, 0, 0.5, 0.0625, 0.201, -0.9796, 0,
+0.267878, -0.646716, 0, 0.5, 0.125, 0.3879, -0.9217, 0,
+0.262731, -0.646716, 0.052261, 0.46875, 0.125, 0.3804, -0.9217, 0.0757,
+0.68655, 0.136563, 0, 0.5, 0.5625, 0.981, 0.1939, 0,
+0.673358, 0.136563, 0.133939, 0.46875, 0.5625, 0.9622, 0.1939, 0.1914,
+0.68655, 0, 0.136564, 0.46875, 0.5, 0.9808, 0, 0.1951,
+0.7, 0, 0, 0.5, 0.5, 1, 0, 0,
+0.68655, 0, 0.136564, 0.46875, 0.5, 0.9808, 0, 0.1951,
+0.673358, -0.136563, 0.133939, 0.46875, 0.4375, 0.9622, -0.1939, 0.1914,
+0.267879, 0.646716, 0, 0.5, 0.875, 0.3879, 0.9217, 0,
+0.136563, 0.68655, 0, 0.5, 0.9375, 0.201, 0.9796, 0,
+0.133939, 0.68655, 0.026642, 0.46875, 0.9375, 0.1971, 0.9796, 0.0392,
+0.68655, -0.136563, 0, 0.5, 0.4375, 0.981, -0.1939, 0,
+0.673358, -0.136563, 0.133939, 0.46875, 0.4375, 0.9622, -0.1939, 0.1914,
+0.634289, -0.267878, 0.126168, 0.46875, 0.375, 0.907, -0.3805, 0.1804,
+0.267879, 0.646716, 0, 0.5, 0.875, 0.3879, 0.9217, 0,
+0.262731, 0.646716, 0.052261, 0.46875, 0.875, 0.3804, 0.9217, 0.0757,
+0.381427, 0.582029, 0.075871, 0.46875, 0.8125, 0.549, 0.8286, 0.1092,
+0.582029, -0.388899, 0, 0.5, 0.3125, 0.8333, -0.5528, 0,
+0.646716, -0.267878, 0, 0.5, 0.375, 0.9247, -0.3805, 0,
+0.634289, -0.267878, 0.126168, 0.46875, 0.375, 0.907, -0.3805, 0.1804,
+0.388899, 0.582029, 0, 0.5, 0.8125, 0.5598, 0.8286, 0,
+0.381427, 0.582029, 0.075871, 0.46875, 0.8125, 0.549, 0.8286, 0.1092,
+0.485464, 0.494975, 0.096565, 0.46875, 0.75, 0.6965, 0.704, 0.1385,
+0.582029, -0.388899, 0, 0.5, 0.3125, 0.8333, -0.5528, 0,
+0.570845, -0.388899, 0.113548, 0.46875, 0.3125, 0.8173, -0.5528, 0.1626,
+0.485464, -0.494975, 0.096565, 0.46875, 0.25, 0.6965, -0.704, 0.1385,
+0.582029, 0.388899, 0, 0.5, 0.6875, 0.8333, 0.5528, 0,
+0.494975, 0.494975, 0, 0.5, 0.75, 0.7101, 0.704, 0,
+0.485464, 0.494975, 0.096565, 0.46875, 0.75, 0.6965, 0.704, 0.1385,
+0.388899, -0.582029, 0, 0.5, 0.1875, 0.5598, -0.8286, 0,
+0.494975, -0.494975, 0, 0.5, 0.25, 0.7101, -0.704, 0,
+0.485464, -0.494975, 0.096565, 0.46875, 0.25, 0.6965, -0.704, 0.1385,
+0.673358, -0.136563, 0.133939, 0.46875, 0.4375, 0.9622, -0.1939, 0.1914,
+0.634289, -0.136563, 0.262731, 0.4375, 0.4375, 0.9063, -0.1939, 0.3754,
+0.597487, -0.267878, 0.247488, 0.4375, 0.375, 0.8544, -0.3805, 0.3539,
+0.381427, 0.582029, 0.075871, 0.46875, 0.8125, 0.549, 0.8286, 0.1092,
+0.262731, 0.646716, 0.052261, 0.46875, 0.875, 0.3804, 0.9217, 0.0757,
+0.247488, 0.646716, 0.102513, 0.4375, 0.875, 0.3583, 0.9217, 0.1484,
+0.570845, -0.388899, 0.113548, 0.46875, 0.3125, 0.8173, -0.5528, 0.1626,
+0.634289, -0.267878, 0.126168, 0.46875, 0.375, 0.907, -0.3805, 0.1804,
+0.597487, -0.267878, 0.247488, 0.4375, 0.375, 0.8544, -0.3805, 0.3539,
+0.381427, 0.582029, 0.075871, 0.46875, 0.8125, 0.549, 0.8286, 0.1092,
+0.359296, 0.582029, 0.148826, 0.4375, 0.8125, 0.5171, 0.8286, 0.2142,
+0.457297, 0.494975, 0.189419, 0.4375, 0.75, 0.6561, 0.704, 0.2717,
+0.570845, -0.388899, 0.113548, 0.46875, 0.3125, 0.8173, -0.5528, 0.1626,
+0.537724, -0.388899, 0.222733, 0.4375, 0.3125, 0.7699, -0.5528, 0.3189,
+0.457297, -0.494975, 0.189419, 0.4375, 0.25, 0.6561, -0.704, 0.2717,
+0.485464, 0.494975, 0.096565, 0.46875, 0.75, 0.6965, 0.704, 0.1385,
+0.457297, 0.494975, 0.189419, 0.4375, 0.75, 0.6561, 0.704, 0.2717,
+0.537724, 0.388899, 0.222733, 0.4375, 0.6875, 0.7699, 0.5528, 0.3189,
+0.485464, -0.494975, 0.096565, 0.46875, 0.25, 0.6965, -0.704, 0.1385,
+0.457297, -0.494975, 0.189419, 0.4375, 0.25, 0.6561, -0.704, 0.2717,
+0.359296, -0.582029, 0.148826, 0.4375, 0.1875, 0.5171, -0.8286, 0.2142,
+0.570845, 0.388899, 0.113548, 0.46875, 0.6875, 0.8173, 0.5528, 0.1626,
+0.537724, 0.388899, 0.222733, 0.4375, 0.6875, 0.7699, 0.5528, 0.3189,
+0.597487, 0.267878, 0.247488, 0.4375, 0.625, 0.8544, 0.3805, 0.3539,
+0.262731, -0.646716, 0.052261, 0.46875, 0.125, 0.3804, -0.9217, 0.0757,
+0.381427, -0.582029, 0.075871, 0.46875, 0.1875, 0.549, -0.8286, 0.1092,
+0.359296, -0.582029, 0.148826, 0.4375, 0.1875, 0.5171, -0.8286, 0.2142,
+0.673358, 0.136563, 0.133939, 0.46875, 0.5625, 0.9622, 0.1939, 0.1914,
+0.634289, 0.267878, 0.126168, 0.46875, 0.625, 0.907, 0.3805, 0.1804,
+0.597487, 0.267878, 0.247488, 0.4375, 0.625, 0.8544, 0.3805, 0.3539,
+0.262731, -0.646716, 0.052261, 0.46875, 0.125, 0.3804, -0.9217, 0.0757,
+0.247487, -0.646716, 0.102513, 0.4375, 0.125, 0.3583, -0.9217, 0.1484,
+0.126168, -0.68655, 0.052261, 0.4375, 0.0625, 0.1856, -0.9796, 0.0769,
+0.673358, 0.136563, 0.133939, 0.46875, 0.5625, 0.9622, 0.1939, 0.1914,
+0.634289, 0.136563, 0.262731, 0.4375, 0.5625, 0.9063, 0.1939, 0.3754,
+0.646716, 0, 0.267879, 0.4375, 0.5, 0.9239, 0, 0.3827,
+0.68655, 0, 0.136564, 0.46875, 0.5, 0.9808, 0, 0.1951,
+0.646716, 0, 0.267879, 0.4375, 0.5, 0.9239, 0, 0.3827,
+0.634289, -0.136563, 0.262731, 0.4375, 0.4375, 0.9063, -0.1939, 0.3754,
+0.133939, 0.68655, 0.026642, 0.46875, 0.9375, 0.1971, 0.9796, 0.0392,
+0.126168, 0.68655, 0.052261, 0.4375, 0.9375, 0.1856, 0.9796, 0.0769,
+0.247488, 0.646716, 0.102513, 0.4375, 0.875, 0.3583, 0.9217, 0.1484,
+0.359296, -0.582029, 0.148826, 0.4375, 0.1875, 0.5171, -0.8286, 0.2142,
+0.323358, -0.582029, 0.216061, 0.40625, 0.1875, 0.4654, -0.8286, 0.311,
+0.222733, -0.646716, 0.148826, 0.40625, 0.125, 0.3225, -0.9217, 0.2155,
+0.634289, 0.136563, 0.262731, 0.4375, 0.5625, 0.9063, 0.1939, 0.3754,
+0.597487, 0.267878, 0.247488, 0.4375, 0.625, 0.8544, 0.3805, 0.3539,
+0.537724, 0.267878, 0.359296, 0.40625, 0.625, 0.7689, 0.3805, 0.5137,
+0.247487, -0.646716, 0.102513, 0.4375, 0.125, 0.3583, -0.9217, 0.1484,
+0.222733, -0.646716, 0.148826, 0.40625, 0.125, 0.3225, -0.9217, 0.2155,
+0.113548, -0.68655, 0.075871, 0.40625, 0.0625, 0.1671, -0.9796, 0.1116,
+0.634289, 0.136563, 0.262731, 0.4375, 0.5625, 0.9063, 0.1939, 0.3754,
+0.570845, 0.136563, 0.381427, 0.40625, 0.5625, 0.8157, 0.1939, 0.545,
+0.582029, 0, 0.388899, 0.40625, 0.5, 0.8314, 0, 0.5556,
+0.634289, -0.136563, 0.262731, 0.4375, 0.4375, 0.9063, -0.1939, 0.3754,
+0.646716, 0, 0.267879, 0.4375, 0.5, 0.9239, 0, 0.3827,
+0.582029, 0, 0.388899, 0.40625, 0.5, 0.8314, 0, 0.5556,
+0.126168, 0.68655, 0.052261, 0.4375, 0.9375, 0.1856, 0.9796, 0.0769,
+0.113548, 0.68655, 0.075871, 0.40625, 0.9375, 0.1671, 0.9796, 0.1116,
+0.222733, 0.646716, 0.148826, 0.40625, 0.875, 0.3225, 0.9217, 0.2155,
+0.634289, -0.136563, 0.262731, 0.4375, 0.4375, 0.9063, -0.1939, 0.3754,
+0.570845, -0.136563, 0.381427, 0.40625, 0.4375, 0.8157, -0.1939, 0.545,
+0.537724, -0.267878, 0.359296, 0.40625, 0.375, 0.7689, -0.3805, 0.5137,
+0.247488, 0.646716, 0.102513, 0.4375, 0.875, 0.3583, 0.9217, 0.1484,
+0.222733, 0.646716, 0.148826, 0.40625, 0.875, 0.3225, 0.9217, 0.2155,
+0.323358, 0.582029, 0.216061, 0.40625, 0.8125, 0.4654, 0.8286, 0.311,
+0.537724, -0.388899, 0.222733, 0.4375, 0.3125, 0.7699, -0.5528, 0.3189,
+0.597487, -0.267878, 0.247488, 0.4375, 0.375, 0.8544, -0.3805, 0.3539,
+0.537724, -0.267878, 0.359296, 0.40625, 0.375, 0.7689, -0.3805, 0.5137,
+0.359296, 0.582029, 0.148826, 0.4375, 0.8125, 0.5171, 0.8286, 0.2142,
+0.323358, 0.582029, 0.216061, 0.40625, 0.8125, 0.4654, 0.8286, 0.311,
+0.411557, 0.494975, 0.274993, 0.40625, 0.75, 0.5904, 0.704, 0.3945,
+0.537724, -0.388899, 0.222733, 0.4375, 0.3125, 0.7699, -0.5528, 0.3189,
+0.483939, -0.388899, 0.323358, 0.40625, 0.3125, 0.6929, -0.5528, 0.463,
+0.411557, -0.494975, 0.274993, 0.40625, 0.25, 0.5904, -0.704, 0.3945,
+0.537724, 0.388899, 0.222733, 0.4375, 0.6875, 0.7699, 0.5528, 0.3189,
+0.457297, 0.494975, 0.189419, 0.4375, 0.75, 0.6561, 0.704, 0.2717,
+0.411557, 0.494975, 0.274993, 0.40625, 0.75, 0.5904, 0.704, 0.3945,
+0.359296, -0.582029, 0.148826, 0.4375, 0.1875, 0.5171, -0.8286, 0.2142,
+0.457297, -0.494975, 0.189419, 0.4375, 0.25, 0.6561, -0.704, 0.2717,
+0.411557, -0.494975, 0.274993, 0.40625, 0.25, 0.5904, -0.704, 0.3945,
+0.537724, 0.388899, 0.222733, 0.4375, 0.6875, 0.7699, 0.5528, 0.3189,
+0.483939, 0.388899, 0.323358, 0.40625, 0.6875, 0.6929, 0.5528, 0.463,
+0.537724, 0.267878, 0.359296, 0.40625, 0.625, 0.7689, 0.3805, 0.5137,
+0.537724, -0.267878, 0.359296, 0.40625, 0.375, 0.7689, -0.3805, 0.5137,
+0.457297, -0.267878, 0.457297, 0.375, 0.375, 0.6539, -0.3805, 0.6539,
+0.411556, -0.388899, 0.411557, 0.375, 0.3125, 0.5893, -0.5528, 0.5893,
+0.323358, 0.582029, 0.216061, 0.40625, 0.8125, 0.4654, 0.8286, 0.311,
+0.274993, 0.582029, 0.274994, 0.375, 0.8125, 0.3958, 0.8286, 0.3958,
+0.35, 0.494975, 0.35, 0.375, 0.75, 0.5021, 0.704, 0.5021,
+0.483939, -0.388899, 0.323358, 0.40625, 0.3125, 0.6929, -0.5528, 0.463,
+0.411556, -0.388899, 0.411557, 0.375, 0.3125, 0.5893, -0.5528, 0.5893,
+0.35, -0.494975, 0.35, 0.375, 0.25, 0.5021, -0.704, 0.5021,
+0.411557, 0.494975, 0.274993, 0.40625, 0.75, 0.5904, 0.704, 0.3945,
+0.35, 0.494975, 0.35, 0.375, 0.75, 0.5021, 0.704, 0.5021,
+0.411556, 0.388899, 0.411557, 0.375, 0.6875, 0.5893, 0.5528, 0.5893,
+0.323358, -0.582029, 0.216061, 0.40625, 0.1875, 0.4654, -0.8286, 0.311,
+0.411557, -0.494975, 0.274993, 0.40625, 0.25, 0.5904, -0.704, 0.3945,
+0.35, -0.494975, 0.35, 0.375, 0.25, 0.5021, -0.704, 0.5021,
+0.483939, 0.388899, 0.323358, 0.40625, 0.6875, 0.6929, 0.5528, 0.463,
+0.411556, 0.388899, 0.411557, 0.375, 0.6875, 0.5893, 0.5528, 0.5893,
+0.457297, 0.267878, 0.457297, 0.375, 0.625, 0.6539, 0.3805, 0.6539,
+0.323358, -0.582029, 0.216061, 0.40625, 0.1875, 0.4654, -0.8286, 0.311,
+0.274993, -0.582029, 0.274993, 0.375, 0.1875, 0.3958, -0.8286, 0.3958,
+0.189419, -0.646716, 0.189419, 0.375, 0.125, 0.2743, -0.9217, 0.2743,
+0.570845, 0.136563, 0.381427, 0.40625, 0.5625, 0.8157, 0.1939, 0.545,
+0.537724, 0.267878, 0.359296, 0.40625, 0.625, 0.7689, 0.3805, 0.5137,
+0.457297, 0.267878, 0.457297, 0.375, 0.625, 0.6539, 0.3805, 0.6539,
+0.113548, -0.68655, 0.075871, 0.40625, 0.0625, 0.1671, -0.9796, 0.1116,
+0.222733, -0.646716, 0.148826, 0.40625, 0.125, 0.3225, -0.9217, 0.2155,
+0.189419, -0.646716, 0.189419, 0.375, 0.125, 0.2743, -0.9217, 0.2743,
+0.570845, 0.136563, 0.381427, 0.40625, 0.5625, 0.8157, 0.1939, 0.545,
+0.485464, 0.136563, 0.485464, 0.375, 0.5625, 0.6937, 0.1939, 0.6937,
+0.494975, 0, 0.494975, 0.375, 0.5, 0.7071, 0, 0.7071,
+0.582029, 0, 0.388899, 0.40625, 0.5, 0.8314, 0, 0.5556,
+0.494975, 0, 0.494975, 0.375, 0.5, 0.7071, 0, 0.7071,
+0.485464, -0.136563, 0.485464, 0.375, 0.4375, 0.6937, -0.1939, 0.6937,
+0.113548, 0.68655, 0.075871, 0.40625, 0.9375, 0.1671, 0.9796, 0.1116,
+0.096565, 0.68655, 0.096565, 0.375, 0.9375, 0.1421, 0.9796, 0.1421,
+0.189419, 0.646716, 0.189419, 0.375, 0.875, 0.2743, 0.9217, 0.2743,
+0.570845, -0.136563, 0.381427, 0.40625, 0.4375, 0.8157, -0.1939, 0.545,
+0.485464, -0.136563, 0.485464, 0.375, 0.4375, 0.6937, -0.1939, 0.6937,
+0.457297, -0.267878, 0.457297, 0.375, 0.375, 0.6539, -0.3805, 0.6539,
+0.222733, 0.646716, 0.148826, 0.40625, 0.875, 0.3225, 0.9217, 0.2155,
+0.189419, 0.646716, 0.189419, 0.375, 0.875, 0.2743, 0.9217, 0.2743,
+0.274993, 0.582029, 0.274994, 0.375, 0.8125, 0.3958, 0.8286, 0.3958,
+0.096565, -0.68655, 0.096565, 0.375, 0.0625, 0.1421, -0.9796, 0.1421,
+0.189419, -0.646716, 0.189419, 0.375, 0.125, 0.2743, -0.9217, 0.2743,
+0.148825, -0.646716, 0.222733, 0.34375, 0.125, 0.2155, -0.9217, 0.3225,
+0.485464, 0.136563, 0.485464, 0.375, 0.5625, 0.6937, 0.1939, 0.6937,
+0.381426, 0.136563, 0.570845, 0.34375, 0.5625, 0.545, 0.1939, 0.8157,
+0.388899, 0, 0.582029, 0.34375, 0.5, 0.5556, 0, 0.8314,
+0.485464, -0.136563, 0.485464, 0.375, 0.4375, 0.6937, -0.1939, 0.6937,
+0.494975, 0, 0.494975, 0.375, 0.5, 0.7071, 0, 0.7071,
+0.388899, 0, 0.582029, 0.34375, 0.5, 0.5556, 0, 0.8314,
+0.096565, 0.68655, 0.096565, 0.375, 0.9375, 0.1421, 0.9796, 0.1421,
+0.075871, 0.68655, 0.113549, 0.34375, 0.9375, 0.1116, 0.9796, 0.1671,
+0.148825, 0.646716, 0.222733, 0.34375, 0.875, 0.2155, 0.9217, 0.3225,
+0.485464, -0.136563, 0.485464, 0.375, 0.4375, 0.6937, -0.1939, 0.6937,
+0.381426, -0.136563, 0.570845, 0.34375, 0.4375, 0.545, -0.1939, 0.8157,
+0.359296, -0.267878, 0.537725, 0.34375, 0.375, 0.5137, -0.3805, 0.7689,
+0.189419, 0.646716, 0.189419, 0.375, 0.875, 0.2743, 0.9217, 0.2743,
+0.148825, 0.646716, 0.222733, 0.34375, 0.875, 0.2155, 0.9217, 0.3225,
+0.216061, 0.582029, 0.323358, 0.34375, 0.8125, 0.311, 0.8286, 0.4654,
+0.411556, -0.388899, 0.411557, 0.375, 0.3125, 0.5893, -0.5528, 0.5893,
+0.457297, -0.267878, 0.457297, 0.375, 0.375, 0.6539, -0.3805, 0.6539,
+0.359296, -0.267878, 0.537725, 0.34375, 0.375, 0.5137, -0.3805, 0.7689,
+0.35, 0.494975, 0.35, 0.375, 0.75, 0.5021, 0.704, 0.5021,
+0.274993, 0.582029, 0.274994, 0.375, 0.8125, 0.3958, 0.8286, 0.3958,
+0.216061, 0.582029, 0.323358, 0.34375, 0.8125, 0.311, 0.8286, 0.4654,
+0.411556, -0.388899, 0.411557, 0.375, 0.3125, 0.5893, -0.5528, 0.5893,
+0.323358, -0.388899, 0.483939, 0.34375, 0.3125, 0.463, -0.5528, 0.6929,
+0.274993, -0.494975, 0.411557, 0.34375, 0.25, 0.3945, -0.704, 0.5904,
+0.411556, 0.388899, 0.411557, 0.375, 0.6875, 0.5893, 0.5528, 0.5893,
+0.35, 0.494975, 0.35, 0.375, 0.75, 0.5021, 0.704, 0.5021,
+0.274993, 0.494975, 0.411557, 0.34375, 0.75, 0.3945, 0.704, 0.5904,
+0.274993, -0.582029, 0.274993, 0.375, 0.1875, 0.3958, -0.8286, 0.3958,
+0.35, -0.494975, 0.35, 0.375, 0.25, 0.5021, -0.704, 0.5021,
+0.274993, -0.494975, 0.411557, 0.34375, 0.25, 0.3945, -0.704, 0.5904,
+0.411556, 0.388899, 0.411557, 0.375, 0.6875, 0.5893, 0.5528, 0.5893,
+0.323358, 0.388899, 0.483939, 0.34375, 0.6875, 0.463, 0.5528, 0.6929,
+0.359296, 0.267878, 0.537725, 0.34375, 0.625, 0.5137, 0.3805, 0.7689,
+0.274993, -0.582029, 0.274993, 0.375, 0.1875, 0.3958, -0.8286, 0.3958,
+0.216061, -0.582029, 0.323358, 0.34375, 0.1875, 0.311, -0.8286, 0.4654,
+0.148825, -0.646716, 0.222733, 0.34375, 0.125, 0.2155, -0.9217, 0.3225,
+0.485464, 0.136563, 0.485464, 0.375, 0.5625, 0.6937, 0.1939, 0.6937,
+0.457297, 0.267878, 0.457297, 0.375, 0.625, 0.6539, 0.3805, 0.6539,
+0.359296, 0.267878, 0.537725, 0.34375, 0.625, 0.5137, 0.3805, 0.7689,
+0.216061, 0.582029, 0.323358, 0.34375, 0.8125, 0.311, 0.8286, 0.4654,
+0.148825, 0.582029, 0.359296, 0.3125, 0.8125, 0.2142, 0.8286, 0.5171,
+0.189419, 0.494975, 0.457297, 0.3125, 0.75, 0.2717, 0.704, 0.6561,
+0.323358, -0.388899, 0.483939, 0.34375, 0.3125, 0.463, -0.5528, 0.6929,
+0.222733, -0.388899, 0.537725, 0.3125, 0.3125, 0.3189, -0.5528, 0.7699,
+0.189419, -0.494975, 0.457297, 0.3125, 0.25, 0.2717, -0.704, 0.6561,
+0.274993, 0.494975, 0.411557, 0.34375, 0.75, 0.3945, 0.704, 0.5904,
+0.189419, 0.494975, 0.457297, 0.3125, 0.75, 0.2717, 0.704, 0.6561,
+0.222733, 0.388899, 0.537725, 0.3125, 0.6875, 0.3189, 0.5528, 0.7699,
+0.216061, -0.582029, 0.323358, 0.34375, 0.1875, 0.311, -0.8286, 0.4654,
+0.274993, -0.494975, 0.411557, 0.34375, 0.25, 0.3945, -0.704, 0.5904,
+0.189419, -0.494975, 0.457297, 0.3125, 0.25, 0.2717, -0.704, 0.6561,
+0.323358, 0.388899, 0.483939, 0.34375, 0.6875, 0.463, 0.5528, 0.6929,
+0.222733, 0.388899, 0.537725, 0.3125, 0.6875, 0.3189, 0.5528, 0.7699,
+0.247487, 0.267878, 0.597488, 0.3125, 0.625, 0.3539, 0.3805, 0.8544,
+0.216061, -0.582029, 0.323358, 0.34375, 0.1875, 0.311, -0.8286, 0.4654,
+0.148825, -0.582029, 0.359296, 0.3125, 0.1875, 0.2142, -0.8286, 0.5171,
+0.102513, -0.646716, 0.247488, 0.3125, 0.125, 0.1484, -0.9217, 0.3583,
+0.381426, 0.136563, 0.570845, 0.34375, 0.5625, 0.545, 0.1939, 0.8157,
+0.359296, 0.267878, 0.537725, 0.34375, 0.625, 0.5137, 0.3805, 0.7689,
+0.247487, 0.267878, 0.597488, 0.3125, 0.625, 0.3539, 0.3805, 0.8544,
+0.148825, -0.646716, 0.222733, 0.34375, 0.125, 0.2155, -0.9217, 0.3225,
+0.102513, -0.646716, 0.247488, 0.3125, 0.125, 0.1484, -0.9217, 0.3583,
+0.05226, -0.68655, 0.126168, 0.3125, 0.0625, 0.0769, -0.9796, 0.1856,
+0.381426, 0.136563, 0.570845, 0.34375, 0.5625, 0.545, 0.1939, 0.8157,
+0.262731, 0.136563, 0.634289, 0.3125, 0.5625, 0.3754, 0.1939, 0.9063,
+0.267878, 0, 0.646716, 0.3125, 0.5, 0.3827, 0, 0.9239,
+0.388899, 0, 0.582029, 0.34375, 0.5, 0.5556, 0, 0.8314,
+0.267878, 0, 0.646716, 0.3125, 0.5, 0.3827, 0, 0.9239,
+0.262731, -0.136563, 0.634289, 0.3125, 0.4375, 0.3754, -0.1939, 0.9063,
+0.075871, 0.68655, 0.113549, 0.34375, 0.9375, 0.1116, 0.9796, 0.1671,
+0.052261, 0.68655, 0.126168, 0.3125, 0.9375, 0.0769, 0.9796, 0.1856,
+0.102513, 0.646716, 0.247488, 0.3125, 0.875, 0.1484, 0.9217, 0.3583,
+0.381426, -0.136563, 0.570845, 0.34375, 0.4375, 0.545, -0.1939, 0.8157,
+0.262731, -0.136563, 0.634289, 0.3125, 0.4375, 0.3754, -0.1939, 0.9063,
+0.247487, -0.267878, 0.597488, 0.3125, 0.375, 0.3539, -0.3805, 0.8544,
+0.216061, 0.582029, 0.323358, 0.34375, 0.8125, 0.311, 0.8286, 0.4654,
+0.148825, 0.646716, 0.222733, 0.34375, 0.875, 0.2155, 0.9217, 0.3225,
+0.102513, 0.646716, 0.247488, 0.3125, 0.875, 0.1484, 0.9217, 0.3583,
+0.323358, -0.388899, 0.483939, 0.34375, 0.3125, 0.463, -0.5528, 0.6929,
+0.359296, -0.267878, 0.537725, 0.34375, 0.375, 0.5137, -0.3805, 0.7689,
+0.247487, -0.267878, 0.597488, 0.3125, 0.375, 0.3539, -0.3805, 0.8544,
+0.262731, 0.136563, 0.634289, 0.3125, 0.5625, 0.3754, 0.1939, 0.9063,
+0.133939, 0.136563, 0.673358, 0.28125, 0.5625, 0.1914, 0.1939, 0.9622,
+0.136563, 0, 0.68655, 0.28125, 0.5, 0.1951, 0, 0.9808,
+0.267878, 0, 0.646716, 0.3125, 0.5, 0.3827, 0, 0.9239,
+0.136563, 0, 0.68655, 0.28125, 0.5, 0.1951, 0, 0.9808,
+0.133939, -0.136563, 0.673358, 0.28125, 0.4375, 0.1914, -0.1939, 0.9622,
+0.052261, 0.68655, 0.126168, 0.3125, 0.9375, 0.0769, 0.9796, 0.1856,
+0.026642, 0.68655, 0.13394, 0.28125, 0.9375, 0.0392, 0.9796, 0.1971,
+0.052261, 0.646716, 0.262731, 0.28125, 0.875, 0.0757, 0.9217, 0.3804,
+0.262731, -0.136563, 0.634289, 0.3125, 0.4375, 0.3754, -0.1939, 0.9063,
+0.133939, -0.136563, 0.673358, 0.28125, 0.4375, 0.1914, -0.1939, 0.9622,
+0.126168, -0.267878, 0.634289, 0.28125, 0.375, 0.1804, -0.3805, 0.907,
+0.102513, 0.646716, 0.247488, 0.3125, 0.875, 0.1484, 0.9217, 0.3583,
+0.052261, 0.646716, 0.262731, 0.28125, 0.875, 0.0757, 0.9217, 0.3804,
+0.07587, 0.582029, 0.381427, 0.28125, 0.8125, 0.1092, 0.8286, 0.549,
+0.222733, -0.388899, 0.537725, 0.3125, 0.3125, 0.3189, -0.5528, 0.7699,
+0.247487, -0.267878, 0.597488, 0.3125, 0.375, 0.3539, -0.3805, 0.8544,
+0.126168, -0.267878, 0.634289, 0.28125, 0.375, 0.1804, -0.3805, 0.907,
+0.148825, 0.582029, 0.359296, 0.3125, 0.8125, 0.2142, 0.8286, 0.5171,
+0.07587, 0.582029, 0.381427, 0.28125, 0.8125, 0.1092, 0.8286, 0.549,
+0.096565, 0.494975, 0.485464, 0.28125, 0.75, 0.1385, 0.704, 0.6965,
+0.222733, -0.388899, 0.537725, 0.3125, 0.3125, 0.3189, -0.5528, 0.7699,
+0.113548, -0.388899, 0.570845, 0.28125, 0.3125, 0.1626, -0.5528, 0.8173,
+0.096565, -0.494975, 0.485464, 0.28125, 0.25, 0.1385, -0.704, 0.6965,
+0.189419, 0.494975, 0.457297, 0.3125, 0.75, 0.2717, 0.704, 0.6561,
+0.096565, 0.494975, 0.485464, 0.28125, 0.75, 0.1385, 0.704, 0.6965,
+0.113548, 0.388899, 0.570845, 0.28125, 0.6875, 0.1626, 0.5528, 0.8173,
+0.189419, -0.494975, 0.457297, 0.3125, 0.25, 0.2717, -0.704, 0.6561,
+0.096565, -0.494975, 0.485464, 0.28125, 0.25, 0.1385, -0.704, 0.6965,
+0.07587, -0.582029, 0.381427, 0.28125, 0.1875, 0.1092, -0.8286, 0.549,
+0.222733, 0.388899, 0.537725, 0.3125, 0.6875, 0.3189, 0.5528, 0.7699,
+0.113548, 0.388899, 0.570845, 0.28125, 0.6875, 0.1626, 0.5528, 0.8173,
+0.126168, 0.267878, 0.634289, 0.28125, 0.625, 0.1804, 0.3805, 0.907,
+0.148825, -0.582029, 0.359296, 0.3125, 0.1875, 0.2142, -0.8286, 0.5171,
+0.07587, -0.582029, 0.381427, 0.28125, 0.1875, 0.1092, -0.8286, 0.549,
+0.05226, -0.646716, 0.262731, 0.28125, 0.125, 0.0757, -0.9217, 0.3804,
+0.262731, 0.136563, 0.634289, 0.3125, 0.5625, 0.3754, 0.1939, 0.9063,
+0.247487, 0.267878, 0.597488, 0.3125, 0.625, 0.3539, 0.3805, 0.8544,
+0.126168, 0.267878, 0.634289, 0.28125, 0.625, 0.1804, 0.3805, 0.907,
+0.05226, -0.68655, 0.126168, 0.3125, 0.0625, 0.0769, -0.9796, 0.1856,
+0.102513, -0.646716, 0.247488, 0.3125, 0.125, 0.1484, -0.9217, 0.3583,
+0.05226, -0.646716, 0.262731, 0.28125, 0.125, 0.0757, -0.9217, 0.3804,
+0.113548, -0.388899, 0.570845, 0.28125, 0.3125, 0.1626, -0.5528, 0.8173,
+ 0, -0.388899, 0.582029, 0.25, 0.3125, 0, -0.5528, 0.8333,
+ 0, -0.494975, 0.494975, 0.25, 0.25, 0, -0.704, 0.7101,
+0.096565, 0.494975, 0.485464, 0.28125, 0.75, 0.1385, 0.704, 0.6965,
+ 0, 0.494975, 0.494975, 0.25, 0.75, 0, 0.704, 0.7101,
+ 0, 0.388899, 0.582029, 0.25, 0.6875, 0, 0.5528, 0.8333,
+0.07587, -0.582029, 0.381427, 0.28125, 0.1875, 0.1092, -0.8286, 0.549,
+0.096565, -0.494975, 0.485464, 0.28125, 0.25, 0.1385, -0.704, 0.6965,
+ 0, -0.494975, 0.494975, 0.25, 0.25, 0, -0.704, 0.7101,
+0.113548, 0.388899, 0.570845, 0.28125, 0.6875, 0.1626, 0.5528, 0.8173,
+ 0, 0.388899, 0.582029, 0.25, 0.6875, 0, 0.5528, 0.8333,
+ 0, 0.267878, 0.646716, 0.25, 0.625, 0, 0.3805, 0.9247,
+0.07587, -0.582029, 0.381427, 0.28125, 0.1875, 0.1092, -0.8286, 0.549,
+ 0, -0.582029, 0.388899, 0.25, 0.1875, 0, -0.8286, 0.5598,
+ 0, -0.646716, 0.267879, 0.25, 0.125, 0, -0.9217, 0.3879,
+0.133939, 0.136563, 0.673358, 0.28125, 0.5625, 0.1914, 0.1939, 0.9622,
+0.126168, 0.267878, 0.634289, 0.28125, 0.625, 0.1804, 0.3805, 0.907,
+ 0, 0.267878, 0.646716, 0.25, 0.625, 0, 0.3805, 0.9247,
+0.026642, -0.68655, 0.133939, 0.28125, 0.0625, 0.0392, -0.9796, 0.1971,
+0.05226, -0.646716, 0.262731, 0.28125, 0.125, 0.0757, -0.9217, 0.3804,
+ 0, -0.646716, 0.267879, 0.25, 0.125, 0, -0.9217, 0.3879,
+0.133939, 0.136563, 0.673358, 0.28125, 0.5625, 0.1914, 0.1939, 0.9622,
+ 0, 0.136563, 0.68655, 0.25, 0.5625, 0, 0.1939, 0.981,
+ 0, 0, 0.7, 0.25, 0.5, 0, 0, 1,
+0.136563, 0, 0.68655, 0.28125, 0.5, 0.1951, 0, 0.9808,
+ 0, 0, 0.7, 0.25, 0.5, 0, 0, 1,
+ 0, -0.136563, 0.68655, 0.25, 0.4375, 0, -0.1939, 0.981,
+0.026642, 0.68655, 0.13394, 0.28125, 0.9375, 0.0392, 0.9796, 0.1971,
+ 0, 0.68655, 0.136564, 0.25, 0.9375, 0, 0.9796, 0.201,
+ 0, 0.646716, 0.267879, 0.25, 0.875, 0, 0.9217, 0.3879,
+0.133939, -0.136563, 0.673358, 0.28125, 0.4375, 0.1914, -0.1939, 0.9622,
+ 0, -0.136563, 0.68655, 0.25, 0.4375, 0, -0.1939, 0.981,
+ 0, -0.267878, 0.646716, 0.25, 0.375, 0, -0.3805, 0.9247,
+0.07587, 0.582029, 0.381427, 0.28125, 0.8125, 0.1092, 0.8286, 0.549,
+0.052261, 0.646716, 0.262731, 0.28125, 0.875, 0.0757, 0.9217, 0.3804,
+ 0, 0.646716, 0.267879, 0.25, 0.875, 0, 0.9217, 0.3879,
+0.113548, -0.388899, 0.570845, 0.28125, 0.3125, 0.1626, -0.5528, 0.8173,
+0.126168, -0.267878, 0.634289, 0.28125, 0.375, 0.1804, -0.3805, 0.907,
+ 0, -0.267878, 0.646716, 0.25, 0.375, 0, -0.3805, 0.9247,
+0.096565, 0.494975, 0.485464, 0.28125, 0.75, 0.1385, 0.704, 0.6965,
+0.07587, 0.582029, 0.381427, 0.28125, 0.8125, 0.1092, 0.8286, 0.549,
+ 0, 0.582029, 0.388899, 0.25, 0.8125, 0, 0.8286, 0.5598,
+ 0, 0, 0.7, 0.25, 0.5, 0, 0, 1,
+-0.136563, 0, 0.68655, 0.21875, 0.5, -0.1951, 0, 0.9808,
+-0.133939, -0.136563, 0.673358, 0.21875, 0.4375, -0.1914, -0.1939, 0.9622,
+ 0, 0.68655, 0.136564, 0.25, 0.9375, 0, 0.9796, 0.201,
+-0.026642, 0.68655, 0.13394, 0.21875, 0.9375, -0.0392, 0.9796, 0.1971,
+-0.05226, 0.646716, 0.262731, 0.21875, 0.875, -0.0757, 0.9217, 0.3804,
+ 0, -0.136563, 0.68655, 0.25, 0.4375, 0, -0.1939, 0.981,
+-0.133939, -0.136563, 0.673358, 0.21875, 0.4375, -0.1914, -0.1939, 0.9622,
+-0.126168, -0.267878, 0.634289, 0.21875, 0.375, -0.1804, -0.3805, 0.907,
+ 0, 0.646716, 0.267879, 0.25, 0.875, 0, 0.9217, 0.3879,
+-0.05226, 0.646716, 0.262731, 0.21875, 0.875, -0.0757, 0.9217, 0.3804,
+-0.07587, 0.582029, 0.381427, 0.21875, 0.8125, -0.1092, 0.8286, 0.549,
+ 0, -0.388899, 0.582029, 0.25, 0.3125, 0, -0.5528, 0.8333,
+ 0, -0.267878, 0.646716, 0.25, 0.375, 0, -0.3805, 0.9247,
+-0.126168, -0.267878, 0.634289, 0.21875, 0.375, -0.1804, -0.3805, 0.907,
+ 0, 0.494975, 0.494975, 0.25, 0.75, 0, 0.704, 0.7101,
+ 0, 0.582029, 0.388899, 0.25, 0.8125, 0, 0.8286, 0.5598,
+-0.07587, 0.582029, 0.381427, 0.21875, 0.8125, -0.1092, 0.8286, 0.549,
+ 0, -0.388899, 0.582029, 0.25, 0.3125, 0, -0.5528, 0.8333,
+-0.113548, -0.388899, 0.570845, 0.21875, 0.3125, -0.1626, -0.5528, 0.8173,
+-0.096565, -0.494975, 0.485464, 0.21875, 0.25, -0.1385, -0.704, 0.6965,
+ 0, 0.388899, 0.582029, 0.25, 0.6875, 0, 0.5528, 0.8333,
+ 0, 0.494975, 0.494975, 0.25, 0.75, 0, 0.704, 0.7101,
+-0.096565, 0.494975, 0.485464, 0.21875, 0.75, -0.1385, 0.704, 0.6965,
+ 0, -0.494975, 0.494975, 0.25, 0.25, 0, -0.704, 0.7101,
+-0.096565, -0.494975, 0.485464, 0.21875, 0.25, -0.1385, -0.704, 0.6965,
+-0.07587, -0.582029, 0.381427, 0.21875, 0.1875, -0.1092, -0.8286, 0.549,
+ 0, 0.388899, 0.582029, 0.25, 0.6875, 0, 0.5528, 0.8333,
+-0.113548, 0.388899, 0.570845, 0.21875, 0.6875, -0.1626, 0.5528, 0.8173,
+-0.126168, 0.267878, 0.634289, 0.21875, 0.625, -0.1804, 0.3805, 0.907,
+ 0, -0.582029, 0.388899, 0.25, 0.1875, 0, -0.8286, 0.5598,
+-0.07587, -0.582029, 0.381427, 0.21875, 0.1875, -0.1092, -0.8286, 0.549,
+-0.05226, -0.646716, 0.262731, 0.21875, 0.125, -0.0757, -0.9217, 0.3804,
+ 0, 0.136563, 0.68655, 0.25, 0.5625, 0, 0.1939, 0.981,
+ 0, 0.267878, 0.646716, 0.25, 0.625, 0, 0.3805, 0.9247,
+-0.126168, 0.267878, 0.634289, 0.21875, 0.625, -0.1804, 0.3805, 0.907,
+ 0, -0.646716, 0.267879, 0.25, 0.125, 0, -0.9217, 0.3879,
+-0.05226, -0.646716, 0.262731, 0.21875, 0.125, -0.0757, -0.9217, 0.3804,
+-0.026642, -0.68655, 0.133939, 0.21875, 0.0625, -0.0392, -0.9796, 0.1971,
+ 0, 0.136563, 0.68655, 0.25, 0.5625, 0, 0.1939, 0.981,
+-0.133939, 0.136563, 0.673358, 0.21875, 0.5625, -0.1914, 0.1939, 0.9622,
+-0.136563, 0, 0.68655, 0.21875, 0.5, -0.1951, 0, 0.9808,
+-0.113548, 0.388899, 0.570845, 0.21875, 0.6875, -0.1626, 0.5528, 0.8173,
+-0.096565, 0.494975, 0.485464, 0.21875, 0.75, -0.1385, 0.704, 0.6965,
+-0.189419, 0.494975, 0.457297, 0.1875, 0.75, -0.2717, 0.704, 0.6561,
+-0.096565, -0.494975, 0.485464, 0.21875, 0.25, -0.1385, -0.704, 0.6965,
+-0.189419, -0.494975, 0.457297, 0.1875, 0.25, -0.2717, -0.704, 0.6561,
+-0.148825, -0.582029, 0.359296, 0.1875, 0.1875, -0.2142, -0.8286, 0.5171,
+-0.113548, 0.388899, 0.570845, 0.21875, 0.6875, -0.1626, 0.5528, 0.8173,
+-0.222733, 0.388899, 0.537724, 0.1875, 0.6875, -0.3189, 0.5528, 0.7699,
+-0.247487, 0.267878, 0.597488, 0.1875, 0.625, -0.3539, 0.3805, 0.8544,
+-0.05226, -0.646716, 0.262731, 0.21875, 0.125, -0.0757, -0.9217, 0.3804,
+-0.07587, -0.582029, 0.381427, 0.21875, 0.1875, -0.1092, -0.8286, 0.549,
+-0.148825, -0.582029, 0.359296, 0.1875, 0.1875, -0.2142, -0.8286, 0.5171,
+-0.133939, 0.136563, 0.673358, 0.21875, 0.5625, -0.1914, 0.1939, 0.9622,
+-0.126168, 0.267878, 0.634289, 0.21875, 0.625, -0.1804, 0.3805, 0.907,
+-0.247487, 0.267878, 0.597488, 0.1875, 0.625, -0.3539, 0.3805, 0.8544,
+-0.026642, -0.68655, 0.133939, 0.21875, 0.0625, -0.0392, -0.9796, 0.1971,
+-0.05226, -0.646716, 0.262731, 0.21875, 0.125, -0.0757, -0.9217, 0.3804,
+-0.102513, -0.646716, 0.247488, 0.1875, 0.125, -0.1484, -0.9217, 0.3583,
+-0.133939, 0.136563, 0.673358, 0.21875, 0.5625, -0.1914, 0.1939, 0.9622,
+-0.262731, 0.136563, 0.634289, 0.1875, 0.5625, -0.3754, 0.1939, 0.9063,
+-0.267879, 0, 0.646716, 0.1875, 0.5, -0.3827, 0, 0.9239,
+-0.133939, -0.136563, 0.673358, 0.21875, 0.4375, -0.1914, -0.1939, 0.9622,
+-0.136563, 0, 0.68655, 0.21875, 0.5, -0.1951, 0, 0.9808,
+-0.267879, 0, 0.646716, 0.1875, 0.5, -0.3827, 0, 0.9239,
+-0.026642, 0.68655, 0.13394, 0.21875, 0.9375, -0.0392, 0.9796, 0.1971,
+-0.052261, 0.68655, 0.126168, 0.1875, 0.9375, -0.0769, 0.9796, 0.1856,
+-0.102513, 0.646716, 0.247488, 0.1875, 0.875, -0.1484, 0.9217, 0.3583,
+-0.133939, -0.136563, 0.673358, 0.21875, 0.4375, -0.1914, -0.1939, 0.9622,
+-0.262731, -0.136563, 0.634289, 0.1875, 0.4375, -0.3754, -0.1939, 0.9063,
+-0.247487, -0.267878, 0.597488, 0.1875, 0.375, -0.3539, -0.3805, 0.8544,
+-0.05226, 0.646716, 0.262731, 0.21875, 0.875, -0.0757, 0.9217, 0.3804,
+-0.102513, 0.646716, 0.247488, 0.1875, 0.875, -0.1484, 0.9217, 0.3583,
+-0.148825, 0.582029, 0.359296, 0.1875, 0.8125, -0.2142, 0.8286, 0.5171,
+-0.113548, -0.388899, 0.570845, 0.21875, 0.3125, -0.1626, -0.5528, 0.8173,
+-0.126168, -0.267878, 0.634289, 0.21875, 0.375, -0.1804, -0.3805, 0.907,
+-0.247487, -0.267878, 0.597488, 0.1875, 0.375, -0.3539, -0.3805, 0.8544,
+-0.096565, 0.494975, 0.485464, 0.21875, 0.75, -0.1385, 0.704, 0.6965,
+-0.07587, 0.582029, 0.381427, 0.21875, 0.8125, -0.1092, 0.8286, 0.549,
+-0.148825, 0.582029, 0.359296, 0.1875, 0.8125, -0.2142, 0.8286, 0.5171,
+-0.113548, -0.388899, 0.570845, 0.21875, 0.3125, -0.1626, -0.5528, 0.8173,
+-0.222733, -0.388899, 0.537724, 0.1875, 0.3125, -0.3189, -0.5528, 0.7699,
+-0.189419, -0.494975, 0.457297, 0.1875, 0.25, -0.2717, -0.704, 0.6561,
+-0.267879, 0, 0.646716, 0.1875, 0.5, -0.3827, 0, 0.9239,
+-0.388899, 0, 0.582029, 0.15625, 0.5, -0.5556, 0, 0.8314,
+-0.381427, -0.136563, 0.570845, 0.15625, 0.4375, -0.545, -0.1939, 0.8157,
+-0.052261, 0.68655, 0.126168, 0.1875, 0.9375, -0.0769, 0.9796, 0.1856,
+-0.075871, 0.68655, 0.113548, 0.15625, 0.9375, -0.1116, 0.9796, 0.1671,
+-0.148825, 0.646716, 0.222733, 0.15625, 0.875, -0.2155, 0.9217, 0.3225,
+-0.262731, -0.136563, 0.634289, 0.1875, 0.4375, -0.3754, -0.1939, 0.9063,
+-0.381427, -0.136563, 0.570845, 0.15625, 0.4375, -0.545, -0.1939, 0.8157,
+-0.359296, -0.267878, 0.537725, 0.15625, 0.375, -0.5137, -0.3805, 0.7689,
+-0.102513, 0.646716, 0.247488, 0.1875, 0.875, -0.1484, 0.9217, 0.3583,
+-0.148825, 0.646716, 0.222733, 0.15625, 0.875, -0.2155, 0.9217, 0.3225,
+-0.216061, 0.582029, 0.323358, 0.15625, 0.8125, -0.311, 0.8286, 0.4654,
+-0.222733, -0.388899, 0.537724, 0.1875, 0.3125, -0.3189, -0.5528, 0.7699,
+-0.247487, -0.267878, 0.597488, 0.1875, 0.375, -0.3539, -0.3805, 0.8544,
+-0.359296, -0.267878, 0.537725, 0.15625, 0.375, -0.5137, -0.3805, 0.7689,
+-0.148825, 0.582029, 0.359296, 0.1875, 0.8125, -0.2142, 0.8286, 0.5171,
+-0.216061, 0.582029, 0.323358, 0.15625, 0.8125, -0.311, 0.8286, 0.4654,
+-0.274993, 0.494975, 0.411557, 0.15625, 0.75, -0.3945, 0.704, 0.5904,
+-0.222733, -0.388899, 0.537724, 0.1875, 0.3125, -0.3189, -0.5528, 0.7699,
+-0.323358, -0.388899, 0.483939, 0.15625, 0.3125, -0.463, -0.5528, 0.6929,
+-0.274993, -0.494975, 0.411557, 0.15625, 0.25, -0.3945, -0.704, 0.5904,
+-0.222733, 0.388899, 0.537724, 0.1875, 0.6875, -0.3189, 0.5528, 0.7699,
+-0.189419, 0.494975, 0.457297, 0.1875, 0.75, -0.2717, 0.704, 0.6561,
+-0.274993, 0.494975, 0.411557, 0.15625, 0.75, -0.3945, 0.704, 0.5904,
+-0.148825, -0.582029, 0.359296, 0.1875, 0.1875, -0.2142, -0.8286, 0.5171,
+-0.189419, -0.494975, 0.457297, 0.1875, 0.25, -0.2717, -0.704, 0.6561,
+-0.274993, -0.494975, 0.411557, 0.15625, 0.25, -0.3945, -0.704, 0.5904,
+-0.222733, 0.388899, 0.537724, 0.1875, 0.6875, -0.3189, 0.5528, 0.7699,
+-0.323358, 0.388899, 0.483939, 0.15625, 0.6875, -0.463, 0.5528, 0.6929,
+-0.359296, 0.267878, 0.537725, 0.15625, 0.625, -0.5137, 0.3805, 0.7689,
+-0.148825, -0.582029, 0.359296, 0.1875, 0.1875, -0.2142, -0.8286, 0.5171,
+-0.216061, -0.582029, 0.323358, 0.15625, 0.1875, -0.311, -0.8286, 0.4654,
+-0.148825, -0.646716, 0.222733, 0.15625, 0.125, -0.2155, -0.9217, 0.3225,
+-0.262731, 0.136563, 0.634289, 0.1875, 0.5625, -0.3754, 0.1939, 0.9063,
+-0.247487, 0.267878, 0.597488, 0.1875, 0.625, -0.3539, 0.3805, 0.8544,
+-0.359296, 0.267878, 0.537725, 0.15625, 0.625, -0.5137, 0.3805, 0.7689,
+-0.05226, -0.68655, 0.126168, 0.1875, 0.0625, -0.0769, -0.9796, 0.1856,
+-0.102513, -0.646716, 0.247488, 0.1875, 0.125, -0.1484, -0.9217, 0.3583,
+-0.148825, -0.646716, 0.222733, 0.15625, 0.125, -0.2155, -0.9217, 0.3225,
+-0.262731, 0.136563, 0.634289, 0.1875, 0.5625, -0.3754, 0.1939, 0.9063,
+-0.381427, 0.136563, 0.570845, 0.15625, 0.5625, -0.545, 0.1939, 0.8157,
+-0.388899, 0, 0.582029, 0.15625, 0.5, -0.5556, 0, 0.8314,
+-0.274993, -0.494975, 0.411557, 0.15625, 0.25, -0.3945, -0.704, 0.5904,
+-0.35, -0.494975, 0.35, 0.125, 0.25, -0.5021, -0.704, 0.5021,
+-0.274993, -0.582029, 0.274993, 0.125, 0.1875, -0.3958, -0.8286, 0.3958,
+-0.323358, 0.388899, 0.483939, 0.15625, 0.6875, -0.463, 0.5528, 0.6929,
+-0.411556, 0.388899, 0.411556, 0.125, 0.6875, -0.5893, 0.5528, 0.5893,
+-0.457297, 0.267878, 0.457297, 0.125, 0.625, -0.6539, 0.3805, 0.6539,
+-0.216061, -0.582029, 0.323358, 0.15625, 0.1875, -0.311, -0.8286, 0.4654,
+-0.274993, -0.582029, 0.274993, 0.125, 0.1875, -0.3958, -0.8286, 0.3958,
+-0.189419, -0.646716, 0.189419, 0.125, 0.125, -0.2743, -0.9217, 0.2743,
+-0.381427, 0.136563, 0.570845, 0.15625, 0.5625, -0.545, 0.1939, 0.8157,
+-0.359296, 0.267878, 0.537725, 0.15625, 0.625, -0.5137, 0.3805, 0.7689,
+-0.457297, 0.267878, 0.457297, 0.125, 0.625, -0.6539, 0.3805, 0.6539,
+-0.148825, -0.646716, 0.222733, 0.15625, 0.125, -0.2155, -0.9217, 0.3225,
+-0.189419, -0.646716, 0.189419, 0.125, 0.125, -0.2743, -0.9217, 0.2743,
+-0.096565, -0.68655, 0.096565, 0.125, 0.0625, -0.1421, -0.9796, 0.1421,
+-0.388899, 0, 0.582029, 0.15625, 0.5, -0.5556, 0, 0.8314,
+-0.381427, 0.136563, 0.570845, 0.15625, 0.5625, -0.545, 0.1939, 0.8157,
+-0.485464, 0.136563, 0.485464, 0.125, 0.5625, -0.6937, 0.1939, 0.6937,
+-0.388899, 0, 0.582029, 0.15625, 0.5, -0.5556, 0, 0.8314,
+-0.494975, 0, 0.494975, 0.125, 0.5, -0.7071, 0, 0.7071,
+-0.485464, -0.136563, 0.485464, 0.125, 0.4375, -0.6937, -0.1939, 0.6937,
+-0.075871, 0.68655, 0.113548, 0.15625, 0.9375, -0.1116, 0.9796, 0.1671,
+-0.096565, 0.68655, 0.096565, 0.125, 0.9375, -0.1421, 0.9796, 0.1421,
+-0.189419, 0.646716, 0.189419, 0.125, 0.875, -0.2743, 0.9217, 0.2743,
+-0.381427, -0.136563, 0.570845, 0.15625, 0.4375, -0.545, -0.1939, 0.8157,
+-0.485464, -0.136563, 0.485464, 0.125, 0.4375, -0.6937, -0.1939, 0.6937,
+-0.457297, -0.267878, 0.457297, 0.125, 0.375, -0.6539, -0.3805, 0.6539,
+-0.148825, 0.646716, 0.222733, 0.15625, 0.875, -0.2155, 0.9217, 0.3225,
+-0.189419, 0.646716, 0.189419, 0.125, 0.875, -0.2743, 0.9217, 0.2743,
+-0.274993, 0.582029, 0.274994, 0.125, 0.8125, -0.3958, 0.8286, 0.3958,
+-0.323358, -0.388899, 0.483939, 0.15625, 0.3125, -0.463, -0.5528, 0.6929,
+-0.359296, -0.267878, 0.537725, 0.15625, 0.375, -0.5137, -0.3805, 0.7689,
+-0.457297, -0.267878, 0.457297, 0.125, 0.375, -0.6539, -0.3805, 0.6539,
+-0.274993, 0.494975, 0.411557, 0.15625, 0.75, -0.3945, 0.704, 0.5904,
+-0.216061, 0.582029, 0.323358, 0.15625, 0.8125, -0.311, 0.8286, 0.4654,
+-0.274993, 0.582029, 0.274994, 0.125, 0.8125, -0.3958, 0.8286, 0.3958,
+-0.323358, -0.388899, 0.483939, 0.15625, 0.3125, -0.463, -0.5528, 0.6929,
+-0.411556, -0.388899, 0.411556, 0.125, 0.3125, -0.5893, -0.5528, 0.5893,
+-0.35, -0.494975, 0.35, 0.125, 0.25, -0.5021, -0.704, 0.5021,
+-0.323358, 0.388899, 0.483939, 0.15625, 0.6875, -0.463, 0.5528, 0.6929,
+-0.274993, 0.494975, 0.411557, 0.15625, 0.75, -0.3945, 0.704, 0.5904,
+-0.35, 0.494975, 0.35, 0.125, 0.75, -0.5021, 0.704, 0.5021,
+-0.485464, -0.136563, 0.485464, 0.125, 0.4375, -0.6937, -0.1939, 0.6937,
+-0.570845, -0.136563, 0.381427, 0.09375, 0.4375, -0.8157, -0.1939, 0.545,
+-0.537724, -0.267878, 0.359296, 0.09375, 0.375, -0.7689, -0.3805, 0.5137,
+-0.189419, 0.646716, 0.189419, 0.125, 0.875, -0.2743, 0.9217, 0.2743,
+-0.222733, 0.646716, 0.148825, 0.09375, 0.875, -0.3225, 0.9217, 0.2155,
+-0.323358, 0.582029, 0.216061, 0.09375, 0.8125, -0.4654, 0.8286, 0.311,
+-0.411556, -0.388899, 0.411556, 0.125, 0.3125, -0.5893, -0.5528, 0.5893,
+-0.457297, -0.267878, 0.457297, 0.125, 0.375, -0.6539, -0.3805, 0.6539,
+-0.537724, -0.267878, 0.359296, 0.09375, 0.375, -0.7689, -0.3805, 0.5137,
+-0.35, 0.494975, 0.35, 0.125, 0.75, -0.5021, 0.704, 0.5021,
+-0.274993, 0.582029, 0.274994, 0.125, 0.8125, -0.3958, 0.8286, 0.3958,
+-0.323358, 0.582029, 0.216061, 0.09375, 0.8125, -0.4654, 0.8286, 0.311,
+-0.411556, -0.388899, 0.411556, 0.125, 0.3125, -0.5893, -0.5528, 0.5893,
+-0.483939, -0.388899, 0.323358, 0.09375, 0.3125, -0.6929, -0.5528, 0.463,
+-0.411556, -0.494975, 0.274993, 0.09375, 0.25, -0.5904, -0.704, 0.3945,
+-0.411556, 0.388899, 0.411556, 0.125, 0.6875, -0.5893, 0.5528, 0.5893,
+-0.35, 0.494975, 0.35, 0.125, 0.75, -0.5021, 0.704, 0.5021,
+-0.411556, 0.494975, 0.274993, 0.09375, 0.75, -0.5904, 0.704, 0.3945,
+-0.35, -0.494975, 0.35, 0.125, 0.25, -0.5021, -0.704, 0.5021,
+-0.411556, -0.494975, 0.274993, 0.09375, 0.25, -0.5904, -0.704, 0.3945,
+-0.323358, -0.582029, 0.216061, 0.09375, 0.1875, -0.4654, -0.8286, 0.311,
+-0.411556, 0.388899, 0.411556, 0.125, 0.6875, -0.5893, 0.5528, 0.5893,
+-0.483939, 0.388899, 0.323358, 0.09375, 0.6875, -0.6929, 0.5528, 0.463,
+-0.537724, 0.267878, 0.359296, 0.09375, 0.625, -0.7689, 0.3805, 0.5137,
+-0.189419, -0.646716, 0.189419, 0.125, 0.125, -0.2743, -0.9217, 0.2743,
+-0.274993, -0.582029, 0.274993, 0.125, 0.1875, -0.3958, -0.8286, 0.3958,
+-0.323358, -0.582029, 0.216061, 0.09375, 0.1875, -0.4654, -0.8286, 0.311,
+-0.485464, 0.136563, 0.485464, 0.125, 0.5625, -0.6937, 0.1939, 0.6937,
+-0.457297, 0.267878, 0.457297, 0.125, 0.625, -0.6539, 0.3805, 0.6539,
+-0.537724, 0.267878, 0.359296, 0.09375, 0.625, -0.7689, 0.3805, 0.5137,
+-0.189419, -0.646716, 0.189419, 0.125, 0.125, -0.2743, -0.9217, 0.2743,
+-0.222733, -0.646716, 0.148825, 0.09375, 0.125, -0.3225, -0.9217, 0.2155,
+-0.113548, -0.68655, 0.075871, 0.09375, 0.0625, -0.1671, -0.9796, 0.1116,
+-0.485464, 0.136563, 0.485464, 0.125, 0.5625, -0.6937, 0.1939, 0.6937,
+-0.570845, 0.136563, 0.381427, 0.09375, 0.5625, -0.8157, 0.1939, 0.545,
+-0.582029, 0, 0.388899, 0.09375, 0.5, -0.8314, 0, 0.5556,
+-0.494975, 0, 0.494975, 0.125, 0.5, -0.7071, 0, 0.7071,
+-0.582029, 0, 0.388899, 0.09375, 0.5, -0.8314, 0, 0.5556,
+-0.570845, -0.136563, 0.381427, 0.09375, 0.4375, -0.8157, -0.1939, 0.545,
+-0.096565, 0.68655, 0.096565, 0.125, 0.9375, -0.1421, 0.9796, 0.1421,
+-0.113548, 0.68655, 0.075871, 0.09375, 0.9375, -0.1671, 0.9796, 0.1116,
+-0.222733, 0.646716, 0.148825, 0.09375, 0.875, -0.3225, 0.9217, 0.2155,
+-0.222733, -0.646716, 0.148825, 0.09375, 0.125, -0.3225, -0.9217, 0.2155,
+-0.323358, -0.582029, 0.216061, 0.09375, 0.1875, -0.4654, -0.8286, 0.311,
+-0.359296, -0.582029, 0.148825, 0.0625, 0.1875, -0.5171, -0.8286, 0.2142,
+-0.570845, 0.136563, 0.381427, 0.09375, 0.5625, -0.8157, 0.1939, 0.545,
+-0.537724, 0.267878, 0.359296, 0.09375, 0.625, -0.7689, 0.3805, 0.5137,
+-0.597487, 0.267878, 0.247488, 0.0625, 0.625, -0.8544, 0.3805, 0.3539,
+-0.113548, -0.68655, 0.075871, 0.09375, 0.0625, -0.1671, -0.9796, 0.1116,
+-0.222733, -0.646716, 0.148825, 0.09375, 0.125, -0.3225, -0.9217, 0.2155,
+-0.247487, -0.646716, 0.102513, 0.0625, 0.125, -0.3583, -0.9217, 0.1484,
+-0.570845, 0.136563, 0.381427, 0.09375, 0.5625, -0.8157, 0.1939, 0.545,
+-0.634289, 0.136563, 0.262731, 0.0625, 0.5625, -0.9063, 0.1939, 0.3754,
+-0.646716, 0, 0.267878, 0.0625, 0.5, -0.9239, 0, 0.3827,
+-0.582029, 0, 0.388899, 0.09375, 0.5, -0.8314, 0, 0.5556,
+-0.646716, 0, 0.267878, 0.0625, 0.5, -0.9239, 0, 0.3827,
+-0.634289, -0.136563, 0.262731, 0.0625, 0.4375, -0.9063, -0.1939, 0.3754,
+-0.113548, 0.68655, 0.075871, 0.09375, 0.9375, -0.1671, 0.9796, 0.1116,
+-0.126168, 0.68655, 0.052261, 0.0625, 0.9375, -0.1856, 0.9796, 0.0769,
+-0.247487, 0.646716, 0.102513, 0.0625, 0.875, -0.3583, 0.9217, 0.1484,
+-0.570845, -0.136563, 0.381427, 0.09375, 0.4375, -0.8157, -0.1939, 0.545,
+-0.634289, -0.136563, 0.262731, 0.0625, 0.4375, -0.9063, -0.1939, 0.3754,
+-0.597487, -0.267878, 0.247488, 0.0625, 0.375, -0.8544, -0.3805, 0.3539,
+-0.222733, 0.646716, 0.148825, 0.09375, 0.875, -0.3225, 0.9217, 0.2155,
+-0.247487, 0.646716, 0.102513, 0.0625, 0.875, -0.3583, 0.9217, 0.1484,
+-0.359296, 0.582029, 0.148825, 0.0625, 0.8125, -0.5171, 0.8286, 0.2142,
+-0.483939, -0.388899, 0.323358, 0.09375, 0.3125, -0.6929, -0.5528, 0.463,
+-0.537724, -0.267878, 0.359296, 0.09375, 0.375, -0.7689, -0.3805, 0.5137,
+-0.597487, -0.267878, 0.247488, 0.0625, 0.375, -0.8544, -0.3805, 0.3539,
+-0.411556, 0.494975, 0.274993, 0.09375, 0.75, -0.5904, 0.704, 0.3945,
+-0.323358, 0.582029, 0.216061, 0.09375, 0.8125, -0.4654, 0.8286, 0.311,
+-0.359296, 0.582029, 0.148825, 0.0625, 0.8125, -0.5171, 0.8286, 0.2142,
+-0.411556, -0.494975, 0.274993, 0.09375, 0.25, -0.5904, -0.704, 0.3945,
+-0.483939, -0.388899, 0.323358, 0.09375, 0.3125, -0.6929, -0.5528, 0.463,
+-0.537724, -0.388899, 0.222733, 0.0625, 0.3125, -0.7699, -0.5528, 0.3189,
+-0.483939, 0.388899, 0.323358, 0.09375, 0.6875, -0.6929, 0.5528, 0.463,
+-0.411556, 0.494975, 0.274993, 0.09375, 0.75, -0.5904, 0.704, 0.3945,
+-0.457297, 0.494975, 0.189419, 0.0625, 0.75, -0.6561, 0.704, 0.2717,
+-0.411556, -0.494975, 0.274993, 0.09375, 0.25, -0.5904, -0.704, 0.3945,
+-0.457297, -0.494975, 0.189419, 0.0625, 0.25, -0.6561, -0.704, 0.2717,
+-0.359296, -0.582029, 0.148825, 0.0625, 0.1875, -0.5171, -0.8286, 0.2142,
+-0.483939, 0.388899, 0.323358, 0.09375, 0.6875, -0.6929, 0.5528, 0.463,
+-0.537724, 0.388899, 0.222733, 0.0625, 0.6875, -0.7699, 0.5528, 0.3189,
+-0.597487, 0.267878, 0.247488, 0.0625, 0.625, -0.8544, 0.3805, 0.3539,
+-0.247487, 0.646716, 0.102513, 0.0625, 0.875, -0.3583, 0.9217, 0.1484,
+-0.262731, 0.646716, 0.052261, 0.03125, 0.875, -0.3804, 0.9217, 0.0757,
+-0.381427, 0.582029, 0.075871, 0.03125, 0.8125, -0.549, 0.8286, 0.1092,
+-0.537724, -0.388899, 0.222733, 0.0625, 0.3125, -0.7699, -0.5528, 0.3189,
+-0.597487, -0.267878, 0.247488, 0.0625, 0.375, -0.8544, -0.3805, 0.3539,
+-0.634289, -0.267878, 0.126168, 0.03125, 0.375, -0.907, -0.3805, 0.1804,
+-0.457297, 0.494975, 0.189419, 0.0625, 0.75, -0.6561, 0.704, 0.2717,
+-0.359296, 0.582029, 0.148825, 0.0625, 0.8125, -0.5171, 0.8286, 0.2142,
+-0.381427, 0.582029, 0.075871, 0.03125, 0.8125, -0.549, 0.8286, 0.1092,
+-0.537724, -0.388899, 0.222733, 0.0625, 0.3125, -0.7699, -0.5528, 0.3189,
+-0.570845, -0.388899, 0.113548, 0.03125, 0.3125, -0.8173, -0.5528, 0.1626,
+-0.485464, -0.494975, 0.096565, 0.03125, 0.25, -0.6965, -0.704, 0.1385,
+-0.537724, 0.388899, 0.222733, 0.0625, 0.6875, -0.7699, 0.5528, 0.3189,
+-0.457297, 0.494975, 0.189419, 0.0625, 0.75, -0.6561, 0.704, 0.2717,
+-0.485464, 0.494975, 0.096565, 0.03125, 0.75, -0.6965, 0.704, 0.1385,
+-0.457297, -0.494975, 0.189419, 0.0625, 0.25, -0.6561, -0.704, 0.2717,
+-0.485464, -0.494975, 0.096565, 0.03125, 0.25, -0.6965, -0.704, 0.1385,
+-0.381426, -0.582029, 0.075871, 0.03125, 0.1875, -0.549, -0.8286, 0.1092,
+-0.537724, 0.388899, 0.222733, 0.0625, 0.6875, -0.7699, 0.5528, 0.3189,
+-0.570845, 0.388899, 0.113548, 0.03125, 0.6875, -0.8173, 0.5528, 0.1626,
+-0.634289, 0.267878, 0.126168, 0.03125, 0.625, -0.907, 0.3805, 0.1804,
+-0.247487, -0.646716, 0.102513, 0.0625, 0.125, -0.3583, -0.9217, 0.1484,
+-0.359296, -0.582029, 0.148825, 0.0625, 0.1875, -0.5171, -0.8286, 0.2142,
+-0.381426, -0.582029, 0.075871, 0.03125, 0.1875, -0.549, -0.8286, 0.1092,
+-0.634289, 0.136563, 0.262731, 0.0625, 0.5625, -0.9063, 0.1939, 0.3754,
+-0.597487, 0.267878, 0.247488, 0.0625, 0.625, -0.8544, 0.3805, 0.3539,
+-0.634289, 0.267878, 0.126168, 0.03125, 0.625, -0.907, 0.3805, 0.1804,
+-0.247487, -0.646716, 0.102513, 0.0625, 0.125, -0.3583, -0.9217, 0.1484,
+-0.262731, -0.646716, 0.052261, 0.03125, 0.125, -0.3804, -0.9217, 0.0757,
+-0.133939, -0.68655, 0.026642, 0.03125, 0.0625, -0.1971, -0.9796, 0.0392,
+-0.634289, 0.136563, 0.262731, 0.0625, 0.5625, -0.9063, 0.1939, 0.3754,
+-0.673358, 0.136563, 0.133939, 0.03125, 0.5625, -0.9622, 0.1939, 0.1914,
+-0.68655, 0, 0.136563, 0.03125, 0.5, -0.9808, 0, 0.1951,
+-0.646716, 0, 0.267878, 0.0625, 0.5, -0.9239, 0, 0.3827,
+-0.68655, 0, 0.136563, 0.03125, 0.5, -0.9808, 0, 0.1951,
+-0.673358, -0.136563, 0.133939, 0.03125, 0.4375, -0.9622, -0.1939, 0.1914,
+-0.247487, 0.646716, 0.102513, 0.0625, 0.875, -0.3583, 0.9217, 0.1484,
+-0.126168, 0.68655, 0.052261, 0.0625, 0.9375, -0.1856, 0.9796, 0.0769,
+-0.133939, 0.68655, 0.026642, 0.03125, 0.9375, -0.1971, 0.9796, 0.0392,
+-0.634289, -0.136563, 0.262731, 0.0625, 0.4375, -0.9063, -0.1939, 0.3754,
+-0.673358, -0.136563, 0.133939, 0.03125, 0.4375, -0.9622, -0.1939, 0.1914,
+-0.634289, -0.267878, 0.126168, 0.03125, 0.375, -0.907, -0.3805, 0.1804,
+-0.673358, 0.136563, 0.133939, 0.03125, 0.5625, -0.9622, 0.1939, 0.1914,
+-0.634289, 0.267878, 0.126168, 0.03125, 0.625, -0.907, 0.3805, 0.1804,
+-0.646716, 0.267878, 0, 0, 0.625, -0.9247, 0.3805, 0,
+-0.262731, -0.646716, 0.052261, 0.03125, 0.125, -0.3804, -0.9217, 0.0757,
+-0.267878, -0.646716, 0, 0, 0.125, -0.3879, -0.9217, 0,
+-0.136563, -0.68655, 0, 0, 0.0625, -0.201, -0.9796, 0,
+-0.673358, 0.136563, 0.133939, 0.03125, 0.5625, -0.9622, 0.1939, 0.1914,
+-0.686549, 0.136563, 0, 0, 0.5625, -0.981, 0.1939, 0,
+-0.7, 0, 0, 0, 0.5, -1, 0, 0,
+-0.673358, -0.136563, 0.133939, 0.03125, 0.4375, -0.9622, -0.1939, 0.1914,
+-0.68655, 0, 0.136563, 0.03125, 0.5, -0.9808, 0, 0.1951,
+-0.7, 0, 0, 0, 0.5, -1, 0, 0,
+-0.262731, 0.646716, 0.052261, 0.03125, 0.875, -0.3804, 0.9217, 0.0757,
+-0.133939, 0.68655, 0.026642, 0.03125, 0.9375, -0.1971, 0.9796, 0.0392,
+-0.136563, 0.68655, 0, 0, 0.9375, -0.201, 0.9796, 0,
+-0.673358, -0.136563, 0.133939, 0.03125, 0.4375, -0.9622, -0.1939, 0.1914,
+-0.686549, -0.136563, 0, 0, 0.4375, -0.981, -0.1939, 0,
+-0.646716, -0.267878, 0, 0, 0.375, -0.9247, -0.3805, 0,
+-0.262731, 0.646716, 0.052261, 0.03125, 0.875, -0.3804, 0.9217, 0.0757,
+-0.267878, 0.646716, 0, 0, 0.875, -0.3879, 0.9217, 0,
+-0.388899, 0.582029, 0, 0, 0.8125, -0.5598, 0.8286, 0,
+-0.570845, -0.388899, 0.113548, 0.03125, 0.3125, -0.8173, -0.5528, 0.1626,
+-0.634289, -0.267878, 0.126168, 0.03125, 0.375, -0.907, -0.3805, 0.1804,
+-0.646716, -0.267878, 0, 0, 0.375, -0.9247, -0.3805, 0,
+-0.485464, 0.494975, 0.096565, 0.03125, 0.75, -0.6965, 0.704, 0.1385,
+-0.381427, 0.582029, 0.075871, 0.03125, 0.8125, -0.549, 0.8286, 0.1092,
+-0.388899, 0.582029, 0, 0, 0.8125, -0.5598, 0.8286, 0,
+-0.570845, -0.388899, 0.113548, 0.03125, 0.3125, -0.8173, -0.5528, 0.1626,
+-0.582028, -0.388899, 0, 0, 0.3125, -0.8333, -0.5528, 0,
+-0.494975, -0.494975, 0, 0, 0.25, -0.7101, -0.704, 0,
+-0.485464, 0.494975, 0.096565, 0.03125, 0.75, -0.6965, 0.704, 0.1385,
+-0.494975, 0.494975, 0, 0, 0.75, -0.7101, 0.704, 0,
+-0.582028, 0.388899, 0, 0, 0.6875, -0.8333, 0.5528, 0,
+-0.381426, -0.582029, 0.075871, 0.03125, 0.1875, -0.549, -0.8286, 0.1092,
+-0.485464, -0.494975, 0.096565, 0.03125, 0.25, -0.6965, -0.704, 0.1385,
+-0.494975, -0.494975, 0, 0, 0.25, -0.7101, -0.704, 0,
+-0.570845, 0.388899, 0.113548, 0.03125, 0.6875, -0.8173, 0.5528, 0.1626,
+-0.582028, 0.388899, 0, 0, 0.6875, -0.8333, 0.5528, 0,
+-0.646716, 0.267878, 0, 0, 0.625, -0.9247, 0.3805, 0,
+-0.262731, -0.646716, 0.052261, 0.03125, 0.125, -0.3804, -0.9217, 0.0757,
+-0.381426, -0.582029, 0.075871, 0.03125, 0.1875, -0.549, -0.8286, 0.1092,
+-0.388899, -0.582029, 0, 0, 0.1875, -0.5598, -0.8286, 0,
+-0.582028, -0.388899, 0, 1, 0.3125, -0.8333, -0.5528, 0,
+-0.646716, -0.267878, 0, 1, 0.375, -0.9247, -0.3805, 0,
+-0.634289, -0.267878, -0.126168, 0.96875, 0.375, -0.907, -0.3805, -0.1804,
+-0.494975, 0.494975, 0, 1, 0.75, -0.7101, 0.704, 0,
+-0.388899, 0.582029, 0, 1, 0.8125, -0.5598, 0.8286, 0,
+-0.381427, 0.582029, -0.07587, 0.96875, 0.8125, -0.549, 0.8286, -0.1092,
+-0.582028, -0.388899, 0, 1, 0.3125, -0.8333, -0.5528, 0,
+-0.570845, -0.388899, -0.113548, 0.96875, 0.3125, -0.8173, -0.5528, -0.1626,
+-0.485464, -0.494975, -0.096565, 0.96875, 0.25, -0.6965, -0.704, -0.1385,
+-0.582028, 0.388899, 0, 1, 0.6875, -0.8333, 0.5528, 0,
+-0.494975, 0.494975, 0, 1, 0.75, -0.7101, 0.704, 0,
+-0.485464, 0.494975, -0.096565, 0.96875, 0.75, -0.6965, 0.704, -0.1385,
+-0.494975, -0.494975, 0, 1, 0.25, -0.7101, -0.704, 0,
+-0.485464, -0.494975, -0.096565, 0.96875, 0.25, -0.6965, -0.704, -0.1385,
+-0.381426, -0.582029, -0.07587, 0.96875, 0.1875, -0.549, -0.8286, -0.1092,
+-0.582028, 0.388899, 0, 1, 0.6875, -0.8333, 0.5528, 0,
+-0.570845, 0.388899, -0.113548, 0.96875, 0.6875, -0.8173, 0.5528, -0.1626,
+-0.634289, 0.267878, -0.126168, 0.96875, 0.625, -0.907, 0.3805, -0.1804,
+-0.267878, -0.646716, 0, 1, 0.125, -0.3879, -0.9217, 0,
+-0.388899, -0.582029, 0, 1, 0.1875, -0.5598, -0.8286, 0,
+-0.381426, -0.582029, -0.07587, 0.96875, 0.1875, -0.549, -0.8286, -0.1092,
+-0.686549, 0.136563, 0, 1, 0.5625, -0.981, 0.1939, 0,
+-0.646716, 0.267878, 0, 1, 0.625, -0.9247, 0.3805, 0,
+-0.634289, 0.267878, -0.126168, 0.96875, 0.625, -0.907, 0.3805, -0.1804,
+-0.267878, -0.646716, 0, 1, 0.125, -0.3879, -0.9217, 0,
+-0.262731, -0.646716, -0.05226, 0.96875, 0.125, -0.3804, -0.9217, -0.0757,
+-0.133939, -0.68655, -0.026642, 0.96875, 0.0625, -0.1971, -0.9796, -0.0392,
+-0.686549, 0.136563, 0, 1, 0.5625, -0.981, 0.1939, 0,
+-0.673357, 0.136563, -0.133939, 0.96875, 0.5625, -0.9622, 0.1939, -0.1914,
+-0.686549, 0, -0.136563, 0.96875, 0.5, -0.9808, 0, -0.1951,
+-0.686549, -0.136563, 0, 1, 0.4375, -0.981, -0.1939, 0,
+-0.7, 0, 0, 1, 0.5, -1, 0, 0,
+-0.686549, 0, -0.136563, 0.96875, 0.5, -0.9808, 0, -0.1951,
+-0.267878, 0.646716, 0, 1, 0.875, -0.3879, 0.9217, 0,
+-0.136563, 0.68655, 0, 1, 0.9375, -0.201, 0.9796, 0,
+-0.133939, 0.68655, -0.026642, 0.96875, 0.9375, -0.1971, 0.9796, -0.0392,
+-0.686549, -0.136563, 0, 1, 0.4375, -0.981, -0.1939, 0,
+-0.673357, -0.136563, -0.133939, 0.96875, 0.4375, -0.9622, -0.1939, -0.1914,
+-0.634289, -0.267878, -0.126168, 0.96875, 0.375, -0.907, -0.3805, -0.1804,
+-0.267878, 0.646716, 0, 1, 0.875, -0.3879, 0.9217, 0,
+-0.262731, 0.646716, -0.05226, 0.96875, 0.875, -0.3804, 0.9217, -0.0757,
+-0.381427, 0.582029, -0.07587, 0.96875, 0.8125, -0.549, 0.8286, -0.1092,
+-0.262731, -0.646716, -0.05226, 0.96875, 0.125, -0.3804, -0.9217, -0.0757,
+-0.247487, -0.646716, -0.102512, 0.9375, 0.125, -0.3583, -0.9217, -0.1484,
+-0.126168, -0.68655, -0.05226, 0.9375, 0.0625, -0.1856, -0.9796, -0.0769,
+-0.673357, 0.136563, -0.133939, 0.96875, 0.5625, -0.9622, 0.1939, -0.1914,
+-0.634289, 0.136563, -0.262731, 0.9375, 0.5625, -0.9063, 0.1939, -0.3754,
+-0.646715, 0, -0.267878, 0.9375, 0.5, -0.9239, 0, -0.3827,
+-0.686549, 0, -0.136563, 0.96875, 0.5, -0.9808, 0, -0.1951,
+-0.646715, 0, -0.267878, 0.9375, 0.5, -0.9239, 0, -0.3827,
+-0.634289, -0.136563, -0.262731, 0.9375, 0.4375, -0.9063, -0.1939, -0.3754,
+-0.133939, 0.68655, -0.026642, 0.96875, 0.9375, -0.1971, 0.9796, -0.0392,
+-0.126168, 0.68655, -0.05226, 0.9375, 0.9375, -0.1856, 0.9796, -0.0769,
+-0.247487, 0.646716, -0.102512, 0.9375, 0.875, -0.3583, 0.9217, -0.1484,
+-0.673357, -0.136563, -0.133939, 0.96875, 0.4375, -0.9622, -0.1939, -0.1914,
+-0.634289, -0.136563, -0.262731, 0.9375, 0.4375, -0.9063, -0.1939, -0.3754,
+-0.597487, -0.267878, -0.247487, 0.9375, 0.375, -0.8544, -0.3805, -0.3539,
+-0.262731, 0.646716, -0.05226, 0.96875, 0.875, -0.3804, 0.9217, -0.0757,
+-0.247487, 0.646716, -0.102512, 0.9375, 0.875, -0.3583, 0.9217, -0.1484,
+-0.359296, 0.582029, -0.148825, 0.9375, 0.8125, -0.5171, 0.8286, -0.2142,
+-0.570845, -0.388899, -0.113548, 0.96875, 0.3125, -0.8173, -0.5528, -0.1626,
+-0.634289, -0.267878, -0.126168, 0.96875, 0.375, -0.907, -0.3805, -0.1804,
+-0.597487, -0.267878, -0.247487, 0.9375, 0.375, -0.8544, -0.3805, -0.3539,
+-0.485464, 0.494975, -0.096565, 0.96875, 0.75, -0.6965, 0.704, -0.1385,
+-0.381427, 0.582029, -0.07587, 0.96875, 0.8125, -0.549, 0.8286, -0.1092,
+-0.359296, 0.582029, -0.148825, 0.9375, 0.8125, -0.5171, 0.8286, -0.2142,
+-0.570845, -0.388899, -0.113548, 0.96875, 0.3125, -0.8173, -0.5528, -0.1626,
+-0.537724, -0.388899, -0.222733, 0.9375, 0.3125, -0.7699, -0.5528, -0.3189,
+-0.457297, -0.494975, -0.189418, 0.9375, 0.25, -0.6561, -0.704, -0.2717,
+-0.485464, 0.494975, -0.096565, 0.96875, 0.75, -0.6965, 0.704, -0.1385,
+-0.457297, 0.494975, -0.189418, 0.9375, 0.75, -0.6561, 0.704, -0.2717,
+-0.537724, 0.388899, -0.222733, 0.9375, 0.6875, -0.7699, 0.5528, -0.3189,
+-0.485464, -0.494975, -0.096565, 0.96875, 0.25, -0.6965, -0.704, -0.1385,
+-0.457297, -0.494975, -0.189418, 0.9375, 0.25, -0.6561, -0.704, -0.2717,
+-0.359296, -0.582029, -0.148825, 0.9375, 0.1875, -0.5171, -0.8286, -0.2142,
+-0.570845, 0.388899, -0.113548, 0.96875, 0.6875, -0.8173, 0.5528, -0.1626,
+-0.537724, 0.388899, -0.222733, 0.9375, 0.6875, -0.7699, 0.5528, -0.3189,
+-0.597487, 0.267878, -0.247487, 0.9375, 0.625, -0.8544, 0.3805, -0.3539,
+-0.262731, -0.646716, -0.05226, 0.96875, 0.125, -0.3804, -0.9217, -0.0757,
+-0.381426, -0.582029, -0.07587, 0.96875, 0.1875, -0.549, -0.8286, -0.1092,
+-0.359296, -0.582029, -0.148825, 0.9375, 0.1875, -0.5171, -0.8286, -0.2142,
+-0.673357, 0.136563, -0.133939, 0.96875, 0.5625, -0.9622, 0.1939, -0.1914,
+-0.634289, 0.267878, -0.126168, 0.96875, 0.625, -0.907, 0.3805, -0.1804,
+-0.597487, 0.267878, -0.247487, 0.9375, 0.625, -0.8544, 0.3805, -0.3539,
+-0.457297, 0.494975, -0.189418, 0.9375, 0.75, -0.6561, 0.704, -0.2717,
+-0.359296, 0.582029, -0.148825, 0.9375, 0.8125, -0.5171, 0.8286, -0.2142,
+-0.323358, 0.582029, -0.216061, 0.90625, 0.8125, -0.4654, 0.8286, -0.311,
+-0.537724, -0.388899, -0.222733, 0.9375, 0.3125, -0.7699, -0.5528, -0.3189,
+-0.483939, -0.388899, -0.323358, 0.90625, 0.3125, -0.6929, -0.5528, -0.463,
+-0.411556, -0.494975, -0.274993, 0.90625, 0.25, -0.5904, -0.704, -0.3945,
+-0.537724, 0.388899, -0.222733, 0.9375, 0.6875, -0.7699, 0.5528, -0.3189,
+-0.457297, 0.494975, -0.189418, 0.9375, 0.75, -0.6561, 0.704, -0.2717,
+-0.411556, 0.494975, -0.274993, 0.90625, 0.75, -0.5904, 0.704, -0.3945,
+-0.457297, -0.494975, -0.189418, 0.9375, 0.25, -0.6561, -0.704, -0.2717,
+-0.411556, -0.494975, -0.274993, 0.90625, 0.25, -0.5904, -0.704, -0.3945,
+-0.323358, -0.582029, -0.216061, 0.90625, 0.1875, -0.4654, -0.8286, -0.311,
+-0.537724, 0.388899, -0.222733, 0.9375, 0.6875, -0.7699, 0.5528, -0.3189,
+-0.483939, 0.388899, -0.323358, 0.90625, 0.6875, -0.6929, 0.5528, -0.463,
+-0.537724, 0.267878, -0.359296, 0.90625, 0.625, -0.7689, 0.3805, -0.5137,
+-0.247487, -0.646716, -0.102512, 0.9375, 0.125, -0.3583, -0.9217, -0.1484,
+-0.359296, -0.582029, -0.148825, 0.9375, 0.1875, -0.5171, -0.8286, -0.2142,
+-0.323358, -0.582029, -0.216061, 0.90625, 0.1875, -0.4654, -0.8286, -0.311,
+-0.634289, 0.136563, -0.262731, 0.9375, 0.5625, -0.9063, 0.1939, -0.3754,
+-0.597487, 0.267878, -0.247487, 0.9375, 0.625, -0.8544, 0.3805, -0.3539,
+-0.537724, 0.267878, -0.359296, 0.90625, 0.625, -0.7689, 0.3805, -0.5137,
+-0.247487, -0.646716, -0.102512, 0.9375, 0.125, -0.3583, -0.9217, -0.1484,
+-0.222733, -0.646716, -0.148825, 0.90625, 0.125, -0.3225, -0.9217, -0.2155,
+-0.113548, -0.68655, -0.07587, 0.90625, 0.0625, -0.1671, -0.9796, -0.1116,
+-0.634289, 0.136563, -0.262731, 0.9375, 0.5625, -0.9063, 0.1939, -0.3754,
+-0.570845, 0.136563, -0.381426, 0.90625, 0.5625, -0.8157, 0.1939, -0.545,
+-0.582028, 0, -0.388899, 0.90625, 0.5, -0.8314, 0, -0.5556,
+-0.634289, -0.136563, -0.262731, 0.9375, 0.4375, -0.9063, -0.1939, -0.3754,
+-0.646715, 0, -0.267878, 0.9375, 0.5, -0.9239, 0, -0.3827,
+-0.582028, 0, -0.388899, 0.90625, 0.5, -0.8314, 0, -0.5556,
+-0.126168, 0.68655, -0.05226, 0.9375, 0.9375, -0.1856, 0.9796, -0.0769,
+-0.113548, 0.68655, -0.07587, 0.90625, 0.9375, -0.1671, 0.9796, -0.1116,
+-0.222733, 0.646716, -0.148825, 0.90625, 0.875, -0.3225, 0.9217, -0.2155,
+-0.634289, -0.136563, -0.262731, 0.9375, 0.4375, -0.9063, -0.1939, -0.3754,
+-0.570845, -0.136563, -0.381426, 0.90625, 0.4375, -0.8157, -0.1939, -0.545,
+-0.537724, -0.267878, -0.359296, 0.90625, 0.375, -0.7689, -0.3805, -0.5137,
+-0.359296, 0.582029, -0.148825, 0.9375, 0.8125, -0.5171, 0.8286, -0.2142,
+-0.247487, 0.646716, -0.102512, 0.9375, 0.875, -0.3583, 0.9217, -0.1484,
+-0.222733, 0.646716, -0.148825, 0.90625, 0.875, -0.3225, 0.9217, -0.2155,
+-0.537724, -0.388899, -0.222733, 0.9375, 0.3125, -0.7699, -0.5528, -0.3189,
+-0.597487, -0.267878, -0.247487, 0.9375, 0.375, -0.8544, -0.3805, -0.3539,
+-0.537724, -0.267878, -0.359296, 0.90625, 0.375, -0.7689, -0.3805, -0.5137,
+-0.570845, 0.136563, -0.381426, 0.90625, 0.5625, -0.8157, 0.1939, -0.545,
+-0.485464, 0.136563, -0.485464, 0.875, 0.5625, -0.6937, 0.1939, -0.6937,
+-0.494974, 0, -0.494974, 0.875, 0.5, -0.7071, 0, -0.7071,
+-0.570845, -0.136563, -0.381426, 0.90625, 0.4375, -0.8157, -0.1939, -0.545,
+-0.582028, 0, -0.388899, 0.90625, 0.5, -0.8314, 0, -0.5556,
+-0.494974, 0, -0.494974, 0.875, 0.5, -0.7071, 0, -0.7071,
+-0.113548, 0.68655, -0.07587, 0.90625, 0.9375, -0.1671, 0.9796, -0.1116,
+-0.096565, 0.68655, -0.096565, 0.875, 0.9375, -0.1421, 0.9796, -0.1421,
+-0.189419, 0.646716, -0.189418, 0.875, 0.875, -0.2743, 0.9217, -0.2743,
+-0.570845, -0.136563, -0.381426, 0.90625, 0.4375, -0.8157, -0.1939, -0.545,
+-0.485464, -0.136563, -0.485464, 0.875, 0.4375, -0.6937, -0.1939, -0.6937,
+-0.457297, -0.267878, -0.457297, 0.875, 0.375, -0.6539, -0.3805, -0.6539,
+-0.222733, 0.646716, -0.148825, 0.90625, 0.875, -0.3225, 0.9217, -0.2155,
+-0.189419, 0.646716, -0.189418, 0.875, 0.875, -0.2743, 0.9217, -0.2743,
+-0.274993, 0.582029, -0.274993, 0.875, 0.8125, -0.3958, 0.8286, -0.3958,
+-0.483939, -0.388899, -0.323358, 0.90625, 0.3125, -0.6929, -0.5528, -0.463,
+-0.537724, -0.267878, -0.359296, 0.90625, 0.375, -0.7689, -0.3805, -0.5137,
+-0.457297, -0.267878, -0.457297, 0.875, 0.375, -0.6539, -0.3805, -0.6539,
+-0.323358, 0.582029, -0.216061, 0.90625, 0.8125, -0.4654, 0.8286, -0.311,
+-0.274993, 0.582029, -0.274993, 0.875, 0.8125, -0.3958, 0.8286, -0.3958,
+-0.35, 0.494975, -0.35, 0.875, 0.75, -0.5021, 0.704, -0.5021,
+-0.483939, -0.388899, -0.323358, 0.90625, 0.3125, -0.6929, -0.5528, -0.463,
+-0.411556, -0.388899, -0.411556, 0.875, 0.3125, -0.5893, -0.5528, -0.5893,
+-0.35, -0.494975, -0.35, 0.875, 0.25, -0.5021, -0.704, -0.5021,
+-0.483939, 0.388899, -0.323358, 0.90625, 0.6875, -0.6929, 0.5528, -0.463,
+-0.411556, 0.494975, -0.274993, 0.90625, 0.75, -0.5904, 0.704, -0.3945,
+-0.35, 0.494975, -0.35, 0.875, 0.75, -0.5021, 0.704, -0.5021,
+-0.411556, -0.494975, -0.274993, 0.90625, 0.25, -0.5904, -0.704, -0.3945,
+-0.35, -0.494975, -0.35, 0.875, 0.25, -0.5021, -0.704, -0.5021,
+-0.274993, -0.582029, -0.274993, 0.875, 0.1875, -0.3958, -0.8286, -0.3958,
+-0.483939, 0.388899, -0.323358, 0.90625, 0.6875, -0.6929, 0.5528, -0.463,
+-0.411556, 0.388899, -0.411556, 0.875, 0.6875, -0.5893, 0.5528, -0.5893,
+-0.457297, 0.267878, -0.457297, 0.875, 0.625, -0.6539, 0.3805, -0.6539,
+-0.323358, -0.582029, -0.216061, 0.90625, 0.1875, -0.4654, -0.8286, -0.311,
+-0.274993, -0.582029, -0.274993, 0.875, 0.1875, -0.3958, -0.8286, -0.3958,
+-0.189419, -0.646716, -0.189418, 0.875, 0.125, -0.2743, -0.9217, -0.2743,
+-0.570845, 0.136563, -0.381426, 0.90625, 0.5625, -0.8157, 0.1939, -0.545,
+-0.537724, 0.267878, -0.359296, 0.90625, 0.625, -0.7689, 0.3805, -0.5137,
+-0.457297, 0.267878, -0.457297, 0.875, 0.625, -0.6539, 0.3805, -0.6539,
+-0.222733, -0.646716, -0.148825, 0.90625, 0.125, -0.3225, -0.9217, -0.2155,
+-0.189419, -0.646716, -0.189418, 0.875, 0.125, -0.2743, -0.9217, -0.2743,
+-0.096565, -0.68655, -0.096565, 0.875, 0.0625, -0.1421, -0.9796, -0.1421,
+-0.411556, -0.388899, -0.411556, 0.875, 0.3125, -0.5893, -0.5528, -0.5893,
+-0.323358, -0.388899, -0.483939, 0.84375, 0.3125, -0.463, -0.5528, -0.6929,
+-0.274993, -0.494975, -0.411556, 0.84375, 0.25, -0.3945, -0.704, -0.5904,
+-0.411556, 0.388899, -0.411556, 0.875, 0.6875, -0.5893, 0.5528, -0.5893,
+-0.35, 0.494975, -0.35, 0.875, 0.75, -0.5021, 0.704, -0.5021,
+-0.274993, 0.494975, -0.411556, 0.84375, 0.75, -0.3945, 0.704, -0.5904,
+-0.274993, -0.582029, -0.274993, 0.875, 0.1875, -0.3958, -0.8286, -0.3958,
+-0.35, -0.494975, -0.35, 0.875, 0.25, -0.5021, -0.704, -0.5021,
+-0.274993, -0.494975, -0.411556, 0.84375, 0.25, -0.3945, -0.704, -0.5904,
+-0.411556, 0.388899, -0.411556, 0.875, 0.6875, -0.5893, 0.5528, -0.5893,
+-0.323358, 0.388899, -0.483939, 0.84375, 0.6875, -0.463, 0.5528, -0.6929,
+-0.359296, 0.267878, -0.537724, 0.84375, 0.625, -0.5137, 0.3805, -0.7689,
+-0.274993, -0.582029, -0.274993, 0.875, 0.1875, -0.3958, -0.8286, -0.3958,
+-0.216061, -0.582029, -0.323358, 0.84375, 0.1875, -0.311, -0.8286, -0.4654,
+-0.148825, -0.646716, -0.222732, 0.84375, 0.125, -0.2155, -0.9217, -0.3225,
+-0.485464, 0.136563, -0.485464, 0.875, 0.5625, -0.6937, 0.1939, -0.6937,
+-0.457297, 0.267878, -0.457297, 0.875, 0.625, -0.6539, 0.3805, -0.6539,
+-0.359296, 0.267878, -0.537724, 0.84375, 0.625, -0.5137, 0.3805, -0.7689,
+-0.189419, -0.646716, -0.189418, 0.875, 0.125, -0.2743, -0.9217, -0.2743,
+-0.148825, -0.646716, -0.222732, 0.84375, 0.125, -0.2155, -0.9217, -0.3225,
+-0.07587, -0.68655, -0.113548, 0.84375, 0.0625, -0.1116, -0.9796, -0.1671,
+-0.494974, 0, -0.494974, 0.875, 0.5, -0.7071, 0, -0.7071,
+-0.485464, 0.136563, -0.485464, 0.875, 0.5625, -0.6937, 0.1939, -0.6937,
+-0.381426, 0.136563, -0.570845, 0.84375, 0.5625, -0.545, 0.1939, -0.8157,
+-0.494974, 0, -0.494974, 0.875, 0.5, -0.7071, 0, -0.7071,
+-0.388899, 0, -0.582028, 0.84375, 0.5, -0.5556, 0, -0.8314,
+-0.381426, -0.136563, -0.570845, 0.84375, 0.4375, -0.545, -0.1939, -0.8157,
+-0.096565, 0.68655, -0.096565, 0.875, 0.9375, -0.1421, 0.9796, -0.1421,
+-0.07587, 0.68655, -0.113548, 0.84375, 0.9375, -0.1116, 0.9796, -0.1671,
+-0.148825, 0.646716, -0.222732, 0.84375, 0.875, -0.2155, 0.9217, -0.3225,
+-0.485464, -0.136563, -0.485464, 0.875, 0.4375, -0.6937, -0.1939, -0.6937,
+-0.381426, -0.136563, -0.570845, 0.84375, 0.4375, -0.545, -0.1939, -0.8157,
+-0.359296, -0.267878, -0.537724, 0.84375, 0.375, -0.5137, -0.3805, -0.7689,
+-0.189419, 0.646716, -0.189418, 0.875, 0.875, -0.2743, 0.9217, -0.2743,
+-0.148825, 0.646716, -0.222732, 0.84375, 0.875, -0.2155, 0.9217, -0.3225,
+-0.216061, 0.582029, -0.323358, 0.84375, 0.8125, -0.311, 0.8286, -0.4654,
+-0.411556, -0.388899, -0.411556, 0.875, 0.3125, -0.5893, -0.5528, -0.5893,
+-0.457297, -0.267878, -0.457297, 0.875, 0.375, -0.6539, -0.3805, -0.6539,
+-0.359296, -0.267878, -0.537724, 0.84375, 0.375, -0.5137, -0.3805, -0.7689,
+-0.274993, 0.582029, -0.274993, 0.875, 0.8125, -0.3958, 0.8286, -0.3958,
+-0.216061, 0.582029, -0.323358, 0.84375, 0.8125, -0.311, 0.8286, -0.4654,
+-0.274993, 0.494975, -0.411556, 0.84375, 0.75, -0.3945, 0.704, -0.5904,
+-0.388899, 0, -0.582028, 0.84375, 0.5, -0.5556, 0, -0.8314,
+-0.267878, 0, -0.646715, 0.8125, 0.5, -0.3827, 0, -0.9239,
+-0.262731, -0.136563, -0.634289, 0.8125, 0.4375, -0.3754, -0.1939, -0.9063,
+-0.148825, 0.646716, -0.222732, 0.84375, 0.875, -0.2155, 0.9217, -0.3225,
+-0.07587, 0.68655, -0.113548, 0.84375, 0.9375, -0.1116, 0.9796, -0.1671,
+-0.05226, 0.68655, -0.126168, 0.8125, 0.9375, -0.0769, 0.9796, -0.1856,
+-0.381426, -0.136563, -0.570845, 0.84375, 0.4375, -0.545, -0.1939, -0.8157,
+-0.262731, -0.136563, -0.634289, 0.8125, 0.4375, -0.3754, -0.1939, -0.9063,
+-0.247487, -0.267878, -0.597487, 0.8125, 0.375, -0.3539, -0.3805, -0.8544,
+-0.216061, 0.582029, -0.323358, 0.84375, 0.8125, -0.311, 0.8286, -0.4654,
+-0.148825, 0.646716, -0.222732, 0.84375, 0.875, -0.2155, 0.9217, -0.3225,
+-0.102513, 0.646716, -0.247487, 0.8125, 0.875, -0.1484, 0.9217, -0.3583,
+-0.323358, -0.388899, -0.483939, 0.84375, 0.3125, -0.463, -0.5528, -0.6929,
+-0.359296, -0.267878, -0.537724, 0.84375, 0.375, -0.5137, -0.3805, -0.7689,
+-0.247487, -0.267878, -0.597487, 0.8125, 0.375, -0.3539, -0.3805, -0.8544,
+-0.274993, 0.494975, -0.411556, 0.84375, 0.75, -0.3945, 0.704, -0.5904,
+-0.216061, 0.582029, -0.323358, 0.84375, 0.8125, -0.311, 0.8286, -0.4654,
+-0.148825, 0.582029, -0.359296, 0.8125, 0.8125, -0.2142, 0.8286, -0.5171,
+-0.323358, -0.388899, -0.483939, 0.84375, 0.3125, -0.463, -0.5528, -0.6929,
+-0.222732, -0.388899, -0.537724, 0.8125, 0.3125, -0.3189, -0.5528, -0.7699,
+-0.189419, -0.494975, -0.457297, 0.8125, 0.25, -0.2717, -0.704, -0.6561,
+-0.323358, 0.388899, -0.483939, 0.84375, 0.6875, -0.463, 0.5528, -0.6929,
+-0.274993, 0.494975, -0.411556, 0.84375, 0.75, -0.3945, 0.704, -0.5904,
+-0.189419, 0.494975, -0.457297, 0.8125, 0.75, -0.2717, 0.704, -0.6561,
+-0.274993, -0.494975, -0.411556, 0.84375, 0.25, -0.3945, -0.704, -0.5904,
+-0.189419, -0.494975, -0.457297, 0.8125, 0.25, -0.2717, -0.704, -0.6561,
+-0.148825, -0.582029, -0.359296, 0.8125, 0.1875, -0.2142, -0.8286, -0.5171,
+-0.323358, 0.388899, -0.483939, 0.84375, 0.6875, -0.463, 0.5528, -0.6929,
+-0.222732, 0.388899, -0.537724, 0.8125, 0.6875, -0.3189, 0.5528, -0.7699,
+-0.247487, 0.267878, -0.597487, 0.8125, 0.625, -0.3539, 0.3805, -0.8544,
+-0.216061, -0.582029, -0.323358, 0.84375, 0.1875, -0.311, -0.8286, -0.4654,
+-0.148825, -0.582029, -0.359296, 0.8125, 0.1875, -0.2142, -0.8286, -0.5171,
+-0.102513, -0.646716, -0.247487, 0.8125, 0.125, -0.1484, -0.9217, -0.3583,
+-0.381426, 0.136563, -0.570845, 0.84375, 0.5625, -0.545, 0.1939, -0.8157,
+-0.359296, 0.267878, -0.537724, 0.84375, 0.625, -0.5137, 0.3805, -0.7689,
+-0.247487, 0.267878, -0.597487, 0.8125, 0.625, -0.3539, 0.3805, -0.8544,
+-0.148825, -0.646716, -0.222732, 0.84375, 0.125, -0.2155, -0.9217, -0.3225,
+-0.102513, -0.646716, -0.247487, 0.8125, 0.125, -0.1484, -0.9217, -0.3583,
+-0.05226, -0.68655, -0.126168, 0.8125, 0.0625, -0.0769, -0.9796, -0.1856,
+-0.381426, 0.136563, -0.570845, 0.84375, 0.5625, -0.545, 0.1939, -0.8157,
+-0.262731, 0.136563, -0.634289, 0.8125, 0.5625, -0.3754, 0.1939, -0.9063,
+-0.267878, 0, -0.646715, 0.8125, 0.5, -0.3827, 0, -0.9239,
+-0.189419, -0.494975, -0.457297, 0.8125, 0.25, -0.2717, -0.704, -0.6561,
+-0.096565, -0.494975, -0.485464, 0.78125, 0.25, -0.1385, -0.704, -0.6965,
+-0.07587, -0.582029, -0.381426, 0.78125, 0.1875, -0.1092, -0.8286, -0.549,
+-0.222732, 0.388899, -0.537724, 0.8125, 0.6875, -0.3189, 0.5528, -0.7699,
+-0.113548, 0.388899, -0.570845, 0.78125, 0.6875, -0.1626, 0.5528, -0.8173,
+-0.126168, 0.267878, -0.634289, 0.78125, 0.625, -0.1804, 0.3805, -0.907,
+-0.148825, -0.582029, -0.359296, 0.8125, 0.1875, -0.2142, -0.8286, -0.5171,
+-0.07587, -0.582029, -0.381426, 0.78125, 0.1875, -0.1092, -0.8286, -0.549,
+-0.05226, -0.646716, -0.262731, 0.78125, 0.125, -0.0757, -0.9217, -0.3804,
+-0.262731, 0.136563, -0.634289, 0.8125, 0.5625, -0.3754, 0.1939, -0.9063,
+-0.247487, 0.267878, -0.597487, 0.8125, 0.625, -0.3539, 0.3805, -0.8544,
+-0.126168, 0.267878, -0.634289, 0.78125, 0.625, -0.1804, 0.3805, -0.907,
+-0.05226, -0.68655, -0.126168, 0.8125, 0.0625, -0.0769, -0.9796, -0.1856,
+-0.102513, -0.646716, -0.247487, 0.8125, 0.125, -0.1484, -0.9217, -0.3583,
+-0.05226, -0.646716, -0.262731, 0.78125, 0.125, -0.0757, -0.9217, -0.3804,
+-0.262731, 0.136563, -0.634289, 0.8125, 0.5625, -0.3754, 0.1939, -0.9063,
+-0.133939, 0.136563, -0.673357, 0.78125, 0.5625, -0.1914, 0.1939, -0.9622,
+-0.136563, 0, -0.686549, 0.78125, 0.5, -0.1951, 0, -0.9808,
+-0.267878, 0, -0.646715, 0.8125, 0.5, -0.3827, 0, -0.9239,
+-0.136563, 0, -0.686549, 0.78125, 0.5, -0.1951, 0, -0.9808,
+-0.133939, -0.136563, -0.673357, 0.78125, 0.4375, -0.1914, -0.1939, -0.9622,
+-0.05226, 0.68655, -0.126168, 0.8125, 0.9375, -0.0769, 0.9796, -0.1856,
+-0.026642, 0.68655, -0.133939, 0.78125, 0.9375, -0.0392, 0.9796, -0.1971,
+-0.05226, 0.646716, -0.262731, 0.78125, 0.875, -0.0757, 0.9217, -0.3804,
+-0.262731, -0.136563, -0.634289, 0.8125, 0.4375, -0.3754, -0.1939, -0.9063,
+-0.133939, -0.136563, -0.673357, 0.78125, 0.4375, -0.1914, -0.1939, -0.9622,
+-0.126168, -0.267878, -0.634289, 0.78125, 0.375, -0.1804, -0.3805, -0.907,
+-0.102513, 0.646716, -0.247487, 0.8125, 0.875, -0.1484, 0.9217, -0.3583,
+-0.05226, 0.646716, -0.262731, 0.78125, 0.875, -0.0757, 0.9217, -0.3804,
+-0.07587, 0.582029, -0.381426, 0.78125, 0.8125, -0.1092, 0.8286, -0.549,
+-0.222732, -0.388899, -0.537724, 0.8125, 0.3125, -0.3189, -0.5528, -0.7699,
+-0.247487, -0.267878, -0.597487, 0.8125, 0.375, -0.3539, -0.3805, -0.8544,
+-0.126168, -0.267878, -0.634289, 0.78125, 0.375, -0.1804, -0.3805, -0.907,
+-0.148825, 0.582029, -0.359296, 0.8125, 0.8125, -0.2142, 0.8286, -0.5171,
+-0.07587, 0.582029, -0.381426, 0.78125, 0.8125, -0.1092, 0.8286, -0.549,
+-0.096565, 0.494975, -0.485464, 0.78125, 0.75, -0.1385, 0.704, -0.6965,
+-0.222732, -0.388899, -0.537724, 0.8125, 0.3125, -0.3189, -0.5528, -0.7699,
+-0.113548, -0.388899, -0.570845, 0.78125, 0.3125, -0.1626, -0.5528, -0.8173,
+-0.096565, -0.494975, -0.485464, 0.78125, 0.25, -0.1385, -0.704, -0.6965,
+-0.222732, 0.388899, -0.537724, 0.8125, 0.6875, -0.3189, 0.5528, -0.7699,
+-0.189419, 0.494975, -0.457297, 0.8125, 0.75, -0.2717, 0.704, -0.6561,
+-0.096565, 0.494975, -0.485464, 0.78125, 0.75, -0.1385, 0.704, -0.6965,
+-0.05226, 0.646716, -0.262731, 0.78125, 0.875, -0.0757, 0.9217, -0.3804,
+-0.026642, 0.68655, -0.133939, 0.78125, 0.9375, -0.0392, 0.9796, -0.1971,
+ 0, 0.68655, -0.136563, 0.75, 0.9375, 0, 0.9796, -0.201,
+-0.133939, -0.136563, -0.673357, 0.78125, 0.4375, -0.1914, -0.1939, -0.9622,
+ 0, -0.136563, -0.68655, 0.75, 0.4375, 0, -0.1939, -0.981,
+ 0, -0.267878, -0.646715, 0.75, 0.375, 0, -0.3805, -0.9247,
+-0.07587, 0.582029, -0.381426, 0.78125, 0.8125, -0.1092, 0.8286, -0.549,
+-0.05226, 0.646716, -0.262731, 0.78125, 0.875, -0.0757, 0.9217, -0.3804,
+ 0, 0.646716, -0.267878, 0.75, 0.875, 0, 0.9217, -0.3879,
+-0.113548, -0.388899, -0.570845, 0.78125, 0.3125, -0.1626, -0.5528, -0.8173,
+-0.126168, -0.267878, -0.634289, 0.78125, 0.375, -0.1804, -0.3805, -0.907,
+ 0, -0.267878, -0.646715, 0.75, 0.375, 0, -0.3805, -0.9247,
+-0.096565, 0.494975, -0.485464, 0.78125, 0.75, -0.1385, 0.704, -0.6965,
+-0.07587, 0.582029, -0.381426, 0.78125, 0.8125, -0.1092, 0.8286, -0.549,
+ 0, 0.582029, -0.388899, 0.75, 0.8125, 0, 0.8286, -0.5598,
+-0.113548, -0.388899, -0.570845, 0.78125, 0.3125, -0.1626, -0.5528, -0.8173,
+ 0, -0.388899, -0.582028, 0.75, 0.3125, 0, -0.5528, -0.8333,
+ 0, -0.494975, -0.494974, 0.75, 0.25, 0, -0.704, -0.7101,
+-0.113548, 0.388899, -0.570845, 0.78125, 0.6875, -0.1626, 0.5528, -0.8173,
+-0.096565, 0.494975, -0.485464, 0.78125, 0.75, -0.1385, 0.704, -0.6965,
+ 0, 0.494975, -0.494975, 0.75, 0.75, 0, 0.704, -0.7101,
+-0.096565, -0.494975, -0.485464, 0.78125, 0.25, -0.1385, -0.704, -0.6965,
+ 0, -0.494975, -0.494974, 0.75, 0.25, 0, -0.704, -0.7101,
+ 0, -0.582029, -0.388899, 0.75, 0.1875, 0, -0.8286, -0.5598,
+-0.126168, 0.267878, -0.634289, 0.78125, 0.625, -0.1804, 0.3805, -0.907,
+-0.113548, 0.388899, -0.570845, 0.78125, 0.6875, -0.1626, 0.5528, -0.8173,
+ 0, 0.388899, -0.582029, 0.75, 0.6875, 0, 0.5528, -0.8333,
+-0.07587, -0.582029, -0.381426, 0.78125, 0.1875, -0.1092, -0.8286, -0.549,
+ 0, -0.582029, -0.388899, 0.75, 0.1875, 0, -0.8286, -0.5598,
+ 0, -0.646716, -0.267878, 0.75, 0.125, 0, -0.9217, -0.3879,
+-0.133939, 0.136563, -0.673357, 0.78125, 0.5625, -0.1914, 0.1939, -0.9622,
+-0.126168, 0.267878, -0.634289, 0.78125, 0.625, -0.1804, 0.3805, -0.907,
+ 0, 0.267878, -0.646716, 0.75, 0.625, 0, 0.3805, -0.9247,
+-0.05226, -0.646716, -0.262731, 0.78125, 0.125, -0.0757, -0.9217, -0.3804,
+ 0, -0.646716, -0.267878, 0.75, 0.125, 0, -0.9217, -0.3879,
+ 0, -0.68655, -0.136563, 0.75, 0.0625, 0, -0.9796, -0.201,
+-0.136563, 0, -0.686549, 0.78125, 0.5, -0.1951, 0, -0.9808,
+-0.133939, 0.136563, -0.673357, 0.78125, 0.5625, -0.1914, 0.1939, -0.9622,
+ 0, 0.136563, -0.68655, 0.75, 0.5625, 0, 0.1939, -0.981,
+-0.136563, 0, -0.686549, 0.78125, 0.5, -0.1951, 0, -0.9808,
+ 0, 0, -0.7, 0.75, 0.5, 0, 0, -1,
+ 0, -0.136563, -0.68655, 0.75, 0.4375, 0, -0.1939, -0.981,
+];
+
+objArray.push(Moon_Sphere_data);
+
+
+groupArray.push(
+ new VertGroup(
+ 0, // material number
+ 0, // object number
+ 0, // starting face
+ 2880, // length
+ )
+);
diff --git a/aswebglue/examples/NormalModel/index.html b/aswebglue/examples/NormalModel/index.html
new file mode 100644
index 0000000..ce203f3
--- /dev/null
+++ b/aswebglue/examples/NormalModel/index.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+ Normal Mapped Wavefront Object converted to AssemblyScript
+
+
+
+ fps:
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/NormalModel/moon.blend b/aswebglue/examples/NormalModel/moon.blend
new file mode 100644
index 0000000..aaeaae2
Binary files /dev/null and b/aswebglue/examples/NormalModel/moon.blend differ
diff --git a/aswebglue/examples/NormalModel/moon.blend1 b/aswebglue/examples/NormalModel/moon.blend1
new file mode 100644
index 0000000..eec717d
Binary files /dev/null and b/aswebglue/examples/NormalModel/moon.blend1 differ
diff --git a/aswebglue/examples/NormalModel/moon.mtl b/aswebglue/examples/NormalModel/moon.mtl
new file mode 100644
index 0000000..f48f025
--- /dev/null
+++ b/aswebglue/examples/NormalModel/moon.mtl
@@ -0,0 +1,14 @@
+# Blender MTL File: 'moon.blend'
+# Material Count: 1
+
+newmtl Material.001
+Ns 225.000000
+Ka 1.000000 1.000000 1.000000
+Kd 0.800000 0.800000 0.800000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
+map_Bump LunarNormalMap.png
+map_Kd LunarMap.png
diff --git a/aswebglue/examples/NormalModel/moon.obj b/aswebglue/examples/NormalModel/moon.obj
new file mode 100644
index 0000000..8016d01
--- /dev/null
+++ b/aswebglue/examples/NormalModel/moon.obj
@@ -0,0 +1,2489 @@
+# Blender v2.90.1 OBJ File: 'moon.blend'
+# www.blender.org
+mtllib moon.mtl
+o Moon_Sphere
+v 0.000000 0.686550 -0.136563
+v 0.000000 0.646716 -0.267878
+v 0.000000 0.582029 -0.388899
+v 0.000000 0.494975 -0.494975
+v 0.000000 0.388899 -0.582029
+v 0.000000 0.267878 -0.646716
+v 0.000000 0.136563 -0.686550
+v 0.000000 0.000000 -0.700000
+v 0.000000 -0.136563 -0.686550
+v 0.000000 -0.582029 -0.388899
+v 0.026642 0.686550 -0.133939
+v 0.052261 0.646716 -0.262731
+v 0.075871 0.582029 -0.381427
+v 0.096565 0.494975 -0.485464
+v 0.113548 0.388899 -0.570845
+v 0.126168 0.267878 -0.634289
+v 0.133939 0.136563 -0.673358
+v 0.136563 0.000000 -0.686550
+v 0.133939 -0.136563 -0.673358
+v 0.126168 -0.267878 -0.634289
+v 0.113548 -0.388899 -0.570845
+v 0.096565 -0.494975 -0.485464
+v 0.075871 -0.582029 -0.381427
+v 0.052261 -0.646716 -0.262731
+v 0.026642 -0.686550 -0.133939
+v 0.052261 0.686550 -0.126168
+v 0.102513 0.646716 -0.247487
+v 0.148825 0.582029 -0.359296
+v 0.189419 0.494975 -0.457297
+v 0.222733 0.388899 -0.537724
+v 0.247487 0.267878 -0.597487
+v 0.262731 0.136563 -0.634289
+v 0.267878 0.000000 -0.646716
+v 0.262731 -0.136563 -0.634289
+v 0.247487 -0.267878 -0.597487
+v 0.222733 -0.388899 -0.537724
+v 0.189419 -0.494975 -0.457297
+v 0.148825 -0.582029 -0.359296
+v 0.102513 -0.646716 -0.247487
+v 0.052261 -0.686550 -0.126168
+v 0.075871 0.686550 -0.113548
+v 0.148825 0.646716 -0.222733
+v 0.216061 0.582029 -0.323358
+v 0.274993 0.494975 -0.411556
+v 0.323358 0.388899 -0.483939
+v 0.359296 0.267878 -0.537724
+v 0.381427 0.136563 -0.570845
+v 0.388899 0.000000 -0.582029
+v 0.381427 -0.136563 -0.570845
+v 0.359296 -0.267878 -0.537724
+v 0.323358 -0.388899 -0.483939
+v 0.274993 -0.494975 -0.411556
+v 0.216061 -0.582029 -0.323358
+v 0.148825 -0.646716 -0.222733
+v 0.075870 -0.686550 -0.113548
+v 0.096565 0.686550 -0.096565
+v 0.189419 0.646716 -0.189419
+v 0.274993 0.582029 -0.274993
+v 0.350000 0.494975 -0.350000
+v 0.411557 0.388899 -0.411556
+v 0.457297 0.267878 -0.457297
+v 0.485464 0.136563 -0.485464
+v 0.494975 0.000000 -0.494975
+v 0.485464 -0.136563 -0.485464
+v 0.457297 -0.267878 -0.457297
+v 0.411557 -0.388899 -0.411556
+v 0.350000 -0.494975 -0.350000
+v 0.274993 -0.582029 -0.274993
+v 0.189419 -0.646716 -0.189419
+v 0.096565 -0.686550 -0.096565
+v 0.113548 0.686550 -0.075870
+v 0.222733 0.646716 -0.148825
+v 0.323358 0.582029 -0.216061
+v 0.411557 0.494975 -0.274993
+v 0.483939 0.388899 -0.323358
+v 0.537725 0.267878 -0.359296
+v 0.570845 0.136563 -0.381426
+v 0.582029 0.000000 -0.388899
+v 0.570845 -0.136563 -0.381426
+v 0.537725 -0.267878 -0.359296
+v 0.483939 -0.388899 -0.323358
+v 0.411557 -0.494975 -0.274993
+v 0.323358 -0.582029 -0.216061
+v 0.222733 -0.646716 -0.148825
+v 0.113548 -0.686550 -0.075870
+v 0.126168 0.686550 -0.052260
+v 0.247488 0.646716 -0.102512
+v 0.359296 0.582029 -0.148825
+v 0.457297 0.494975 -0.189418
+v 0.537725 0.388899 -0.222733
+v 0.597487 0.267878 -0.247487
+v 0.634289 0.136563 -0.262731
+v 0.646716 0.000000 -0.267878
+v 0.634289 -0.136563 -0.262731
+v 0.597487 -0.267878 -0.247487
+v 0.537725 -0.388899 -0.222733
+v 0.457297 -0.494975 -0.189418
+v 0.359296 -0.582029 -0.148825
+v 0.247487 -0.646716 -0.102512
+v 0.126168 -0.686550 -0.052260
+v 0.133939 0.686550 -0.026642
+v 0.262731 0.646716 -0.052260
+v 0.381427 0.582029 -0.075870
+v 0.485464 0.494975 -0.096565
+v 0.570845 0.388899 -0.113548
+v 0.634289 0.267878 -0.126168
+v 0.673358 0.136563 -0.133939
+v 0.686550 0.000000 -0.136563
+v 0.673358 -0.136563 -0.133939
+v 0.634289 -0.267878 -0.126168
+v 0.570845 -0.388899 -0.113548
+v 0.485464 -0.494975 -0.096565
+v 0.381427 -0.582029 -0.075870
+v 0.262731 -0.646716 -0.052260
+v 0.133939 -0.686550 -0.026642
+v 0.136563 0.686550 0.000000
+v 0.267879 0.646716 0.000000
+v 0.388899 0.582029 0.000000
+v 0.494975 0.494975 0.000000
+v 0.582029 0.388899 0.000000
+v 0.646716 0.267878 0.000000
+v 0.686550 0.136563 0.000000
+v 0.700000 0.000000 0.000000
+v 0.686550 -0.136563 0.000000
+v 0.646716 -0.267878 0.000000
+v 0.582029 -0.388899 0.000000
+v 0.494975 -0.494975 0.000000
+v 0.388899 -0.582029 0.000000
+v 0.267878 -0.646716 0.000000
+v 0.136563 -0.686550 0.000000
+v 0.133939 0.686550 0.026642
+v 0.262731 0.646716 0.052261
+v 0.381427 0.582029 0.075871
+v 0.485464 0.494975 0.096565
+v 0.570845 0.388899 0.113548
+v 0.634289 0.267878 0.126168
+v 0.673358 0.136563 0.133939
+v 0.686550 0.000000 0.136564
+v 0.673358 -0.136563 0.133939
+v 0.634289 -0.267878 0.126168
+v 0.570845 -0.388899 0.113548
+v 0.485464 -0.494975 0.096565
+v 0.381427 -0.582029 0.075871
+v 0.262731 -0.646716 0.052261
+v 0.133939 -0.686550 0.026642
+v 0.126168 0.686550 0.052261
+v 0.247488 0.646716 0.102513
+v 0.359296 0.582029 0.148826
+v 0.457297 0.494975 0.189419
+v 0.537724 0.388899 0.222733
+v 0.597487 0.267878 0.247488
+v 0.634289 0.136563 0.262731
+v 0.646716 0.000000 0.267879
+v 0.634289 -0.136563 0.262731
+v 0.597487 -0.267878 0.247488
+v 0.537724 -0.388899 0.222733
+v 0.457297 -0.494975 0.189419
+v 0.359296 -0.582029 0.148826
+v 0.247487 -0.646716 0.102513
+v 0.126168 -0.686550 0.052261
+v 0.113548 0.686550 0.075871
+v 0.222733 0.646716 0.148826
+v 0.323358 0.582029 0.216061
+v 0.411557 0.494975 0.274993
+v 0.483939 0.388899 0.323358
+v 0.537724 0.267878 0.359296
+v 0.570845 0.136563 0.381427
+v 0.582029 0.000000 0.388899
+v 0.570845 -0.136563 0.381427
+v 0.537724 -0.267878 0.359296
+v 0.483939 -0.388899 0.323358
+v 0.411557 -0.494975 0.274993
+v 0.323358 -0.582029 0.216061
+v 0.222733 -0.646716 0.148826
+v 0.113548 -0.686550 0.075871
+v 0.096565 0.686550 0.096565
+v 0.189419 0.646716 0.189419
+v 0.274993 0.582029 0.274994
+v 0.350000 0.494975 0.350000
+v 0.411556 0.388899 0.411557
+v 0.457297 0.267878 0.457297
+v 0.485464 0.136563 0.485464
+v 0.494975 0.000000 0.494975
+v 0.485464 -0.136563 0.485464
+v 0.457297 -0.267878 0.457297
+v 0.411556 -0.388899 0.411557
+v 0.350000 -0.494975 0.350000
+v 0.274993 -0.582029 0.274993
+v 0.189419 -0.646716 0.189419
+v 0.096565 -0.686550 0.096565
+v 0.075871 0.686550 0.113549
+v 0.148825 0.646716 0.222733
+v 0.216061 0.582029 0.323358
+v 0.274993 0.494975 0.411557
+v 0.323358 0.388899 0.483939
+v 0.359296 0.267878 0.537725
+v 0.381426 0.136563 0.570845
+v 0.388899 0.000000 0.582029
+v 0.381426 -0.136563 0.570845
+v 0.359296 -0.267878 0.537725
+v 0.323358 -0.388899 0.483939
+v 0.274993 -0.494975 0.411557
+v 0.216061 -0.582029 0.323358
+v 0.148825 -0.646716 0.222733
+v 0.075870 -0.686550 0.113548
+v 0.000000 -0.700000 0.000000
+v 0.052261 0.686550 0.126168
+v 0.102513 0.646716 0.247488
+v 0.148825 0.582029 0.359296
+v 0.189419 0.494975 0.457297
+v 0.222733 0.388899 0.537725
+v 0.247487 0.267878 0.597488
+v 0.262731 0.136563 0.634289
+v 0.267878 0.000000 0.646716
+v 0.262731 -0.136563 0.634289
+v 0.247487 -0.267878 0.597488
+v 0.222733 -0.388899 0.537725
+v 0.189419 -0.494975 0.457297
+v 0.148825 -0.582029 0.359296
+v 0.102513 -0.646716 0.247488
+v 0.052260 -0.686550 0.126168
+v 0.026642 0.686550 0.133940
+v 0.052261 0.646716 0.262731
+v 0.075870 0.582029 0.381427
+v 0.096565 0.494975 0.485464
+v 0.113548 0.388899 0.570845
+v 0.126168 0.267878 0.634289
+v 0.133939 0.136563 0.673358
+v 0.136563 0.000000 0.686550
+v 0.133939 -0.136563 0.673358
+v 0.126168 -0.267878 0.634289
+v 0.113548 -0.388899 0.570845
+v 0.096565 -0.494975 0.485464
+v 0.075870 -0.582029 0.381427
+v 0.052260 -0.646716 0.262731
+v 0.026642 -0.686550 0.133939
+v -0.000000 0.686550 0.136564
+v 0.000000 0.646716 0.267879
+v 0.000000 0.582029 0.388899
+v -0.000000 0.494975 0.494975
+v -0.000000 0.388899 0.582029
+v 0.000000 0.267878 0.646716
+v -0.000000 0.136563 0.686550
+v -0.000000 0.000000 0.700000
+v -0.000000 -0.136563 0.686550
+v 0.000000 -0.267878 0.646716
+v -0.000000 -0.388899 0.582029
+v -0.000000 -0.494975 0.494975
+v -0.000000 -0.582029 0.388899
+v 0.000000 -0.646716 0.267879
+v 0.000000 -0.686550 0.136563
+v -0.026642 0.686550 0.133940
+v -0.052260 0.646716 0.262731
+v -0.075870 0.582029 0.381427
+v -0.096565 0.494975 0.485464
+v -0.113548 0.388899 0.570845
+v -0.126168 0.267878 0.634289
+v -0.133939 0.136563 0.673358
+v -0.136563 0.000000 0.686550
+v -0.133939 -0.136563 0.673358
+v -0.126168 -0.267878 0.634289
+v -0.113548 -0.388899 0.570845
+v -0.096565 -0.494975 0.485464
+v -0.075870 -0.582029 0.381427
+v -0.052260 -0.646716 0.262731
+v -0.026642 -0.686550 0.133939
+v -0.052261 0.686550 0.126168
+v -0.102513 0.646716 0.247488
+v -0.148825 0.582029 0.359296
+v -0.189419 0.494975 0.457297
+v -0.222733 0.388899 0.537724
+v -0.247487 0.267878 0.597488
+v -0.262731 0.136563 0.634289
+v -0.267879 0.000000 0.646716
+v -0.262731 -0.136563 0.634289
+v -0.247487 -0.267878 0.597488
+v -0.222733 -0.388899 0.537724
+v -0.189419 -0.494975 0.457297
+v -0.148825 -0.582029 0.359296
+v -0.102513 -0.646716 0.247488
+v -0.052260 -0.686550 0.126168
+v -0.075871 0.686550 0.113548
+v -0.148825 0.646716 0.222733
+v -0.216061 0.582029 0.323358
+v -0.274993 0.494975 0.411557
+v -0.323358 0.388899 0.483939
+v -0.359296 0.267878 0.537725
+v -0.381427 0.136563 0.570845
+v -0.388899 0.000000 0.582029
+v -0.381427 -0.136563 0.570845
+v -0.359296 -0.267878 0.537725
+v -0.323358 -0.388899 0.483939
+v -0.274993 -0.494975 0.411557
+v -0.216061 -0.582029 0.323358
+v -0.148825 -0.646716 0.222733
+v -0.075870 -0.686550 0.113548
+v -0.000000 0.700000 0.000000
+v -0.096565 0.686550 0.096565
+v -0.189419 0.646716 0.189419
+v -0.274993 0.582029 0.274994
+v -0.350000 0.494975 0.350000
+v -0.411556 0.388899 0.411556
+v -0.457297 0.267878 0.457297
+v -0.485464 0.136563 0.485464
+v -0.494975 0.000000 0.494975
+v -0.485464 -0.136563 0.485464
+v -0.457297 -0.267878 0.457297
+v -0.411556 -0.388899 0.411556
+v -0.350000 -0.494975 0.350000
+v -0.274993 -0.582029 0.274993
+v -0.189419 -0.646716 0.189419
+v -0.096565 -0.686550 0.096565
+v -0.113548 0.686550 0.075871
+v -0.222733 0.646716 0.148825
+v -0.323358 0.582029 0.216061
+v -0.411556 0.494975 0.274993
+v -0.483939 0.388899 0.323358
+v -0.537724 0.267878 0.359296
+v -0.570845 0.136563 0.381427
+v -0.582029 0.000000 0.388899
+v -0.570845 -0.136563 0.381427
+v -0.537724 -0.267878 0.359296
+v -0.483939 -0.388899 0.323358
+v -0.411556 -0.494975 0.274993
+v -0.323358 -0.582029 0.216061
+v -0.222733 -0.646716 0.148825
+v -0.113548 -0.686550 0.075871
+v -0.126168 0.686550 0.052261
+v -0.247487 0.646716 0.102513
+v -0.359296 0.582029 0.148825
+v -0.457297 0.494975 0.189419
+v -0.537724 0.388899 0.222733
+v -0.597487 0.267878 0.247488
+v -0.634289 0.136563 0.262731
+v -0.646716 0.000000 0.267878
+v -0.634289 -0.136563 0.262731
+v -0.597487 -0.267878 0.247488
+v -0.537724 -0.388899 0.222733
+v -0.457297 -0.494975 0.189419
+v -0.359296 -0.582029 0.148825
+v -0.247487 -0.646716 0.102513
+v -0.126168 -0.686550 0.052261
+v -0.133939 0.686550 0.026642
+v -0.262731 0.646716 0.052261
+v -0.381427 0.582029 0.075871
+v -0.485464 0.494975 0.096565
+v -0.570845 0.388899 0.113548
+v -0.634289 0.267878 0.126168
+v -0.673358 0.136563 0.133939
+v -0.686550 0.000000 0.136563
+v -0.673358 -0.136563 0.133939
+v -0.634289 -0.267878 0.126168
+v -0.570845 -0.388899 0.113548
+v -0.485464 -0.494975 0.096565
+v -0.381426 -0.582029 0.075871
+v -0.262731 -0.646716 0.052261
+v -0.133939 -0.686550 0.026642
+v -0.136563 0.686550 0.000000
+v -0.267878 0.646716 0.000000
+v -0.388899 0.582029 0.000000
+v -0.494975 0.494975 0.000000
+v -0.582028 0.388899 0.000000
+v -0.646716 0.267878 0.000000
+v -0.686549 0.136563 0.000000
+v -0.700000 0.000000 0.000000
+v -0.686549 -0.136563 0.000000
+v -0.646716 -0.267878 0.000000
+v -0.582028 -0.388899 0.000000
+v -0.494975 -0.494975 0.000000
+v -0.388899 -0.582029 0.000000
+v -0.267878 -0.646716 0.000000
+v -0.136563 -0.686550 0.000000
+v -0.133939 0.686550 -0.026642
+v -0.262731 0.646716 -0.052260
+v -0.381427 0.582029 -0.075870
+v -0.485464 0.494975 -0.096565
+v -0.570845 0.388899 -0.113548
+v -0.634289 0.267878 -0.126168
+v -0.673357 0.136563 -0.133939
+v -0.686549 0.000000 -0.136563
+v -0.673357 -0.136563 -0.133939
+v -0.634289 -0.267878 -0.126168
+v -0.570845 -0.388899 -0.113548
+v -0.485464 -0.494975 -0.096565
+v -0.381426 -0.582029 -0.075870
+v -0.262731 -0.646716 -0.052260
+v -0.133939 -0.686550 -0.026642
+v -0.126168 0.686550 -0.052260
+v -0.247487 0.646716 -0.102512
+v -0.359296 0.582029 -0.148825
+v -0.457297 0.494975 -0.189418
+v -0.537724 0.388899 -0.222733
+v -0.597487 0.267878 -0.247487
+v -0.634289 0.136563 -0.262731
+v -0.646715 0.000000 -0.267878
+v -0.634289 -0.136563 -0.262731
+v -0.597487 -0.267878 -0.247487
+v -0.537724 -0.388899 -0.222733
+v -0.457297 -0.494975 -0.189418
+v -0.359296 -0.582029 -0.148825
+v -0.247487 -0.646716 -0.102512
+v -0.126168 -0.686550 -0.052260
+v -0.113548 0.686550 -0.075870
+v -0.222733 0.646716 -0.148825
+v -0.323358 0.582029 -0.216061
+v -0.411556 0.494975 -0.274993
+v -0.483939 0.388899 -0.323358
+v -0.537724 0.267878 -0.359296
+v -0.570845 0.136563 -0.381426
+v -0.582028 0.000000 -0.388899
+v -0.570845 -0.136563 -0.381426
+v -0.537724 -0.267878 -0.359296
+v -0.483939 -0.388899 -0.323358
+v -0.411556 -0.494975 -0.274993
+v -0.323358 -0.582029 -0.216061
+v -0.222733 -0.646716 -0.148825
+v -0.113548 -0.686550 -0.075870
+v -0.096565 0.686550 -0.096565
+v -0.189419 0.646716 -0.189418
+v -0.274993 0.582029 -0.274993
+v -0.350000 0.494975 -0.350000
+v -0.411556 0.388899 -0.411556
+v -0.457297 0.267878 -0.457297
+v -0.485464 0.136563 -0.485464
+v -0.494974 0.000000 -0.494974
+v -0.485464 -0.136563 -0.485464
+v -0.457297 -0.267878 -0.457297
+v -0.411556 -0.388899 -0.411556
+v -0.350000 -0.494975 -0.350000
+v -0.274993 -0.582029 -0.274993
+v -0.189419 -0.646716 -0.189418
+v -0.096565 -0.686550 -0.096565
+v -0.075870 0.686550 -0.113548
+v -0.148825 0.646716 -0.222732
+v -0.216061 0.582029 -0.323358
+v -0.274993 0.494975 -0.411556
+v -0.323358 0.388899 -0.483939
+v -0.359296 0.267878 -0.537724
+v -0.381426 0.136563 -0.570845
+v -0.388899 0.000000 -0.582028
+v -0.381426 -0.136563 -0.570845
+v -0.359296 -0.267878 -0.537724
+v -0.323358 -0.388899 -0.483939
+v -0.274993 -0.494975 -0.411556
+v -0.216061 -0.582029 -0.323358
+v -0.148825 -0.646716 -0.222732
+v -0.075870 -0.686550 -0.113548
+v -0.052260 0.686550 -0.126168
+v -0.102513 0.646716 -0.247487
+v -0.148825 0.582029 -0.359296
+v -0.189419 0.494975 -0.457297
+v -0.222732 0.388899 -0.537724
+v -0.247487 0.267878 -0.597487
+v -0.262731 0.136563 -0.634289
+v -0.267878 0.000000 -0.646715
+v -0.262731 -0.136563 -0.634289
+v -0.247487 -0.267878 -0.597487
+v -0.222732 -0.388899 -0.537724
+v -0.189419 -0.494975 -0.457297
+v -0.148825 -0.582029 -0.359296
+v -0.102513 -0.646716 -0.247487
+v -0.052260 -0.686550 -0.126168
+v -0.026642 0.686550 -0.133939
+v -0.052260 0.646716 -0.262731
+v -0.075870 0.582029 -0.381426
+v -0.096565 0.494975 -0.485464
+v -0.113548 0.388899 -0.570845
+v -0.126168 0.267878 -0.634289
+v -0.133939 0.136563 -0.673357
+v -0.136563 0.000000 -0.686549
+v -0.133939 -0.136563 -0.673357
+v -0.126168 -0.267878 -0.634289
+v -0.113548 -0.388899 -0.570845
+v -0.096565 -0.494975 -0.485464
+v -0.075870 -0.582029 -0.381426
+v -0.052260 -0.646716 -0.262731
+v -0.026642 -0.686550 -0.133939
+v 0.000000 -0.267878 -0.646715
+v 0.000000 -0.388899 -0.582028
+v 0.000000 -0.494975 -0.494974
+v 0.000000 -0.646716 -0.267878
+v 0.000000 -0.686550 -0.136563
+vt 0.750000 0.500000
+vt 0.718750 0.437500
+vt 0.750000 0.437500
+vt 0.750000 0.937500
+vt 0.718750 0.875000
+vt 0.750000 0.875000
+vt 0.718750 0.375000
+vt 0.750000 0.375000
+vt 0.750000 0.812500
+vt 0.718750 0.812500
+vt 0.718750 0.312500
+vt 0.750000 0.312500
+vt 0.718750 0.750000
+vt 0.750000 0.750000
+vt 0.718750 0.250000
+vt 0.750000 0.250000
+vt 0.718750 0.687500
+vt 0.750000 0.687500
+vt 0.718750 0.187500
+vt 0.750000 0.187500
+vt 0.718750 0.625000
+vt 0.750000 0.625000
+vt 0.718750 0.125000
+vt 0.750000 0.125000
+vt 0.718750 0.562500
+vt 0.750000 0.562500
+vt 0.718750 0.062500
+vt 0.750000 0.062500
+vt 0.718750 0.500000
+vt 0.734375 1.000000
+vt 0.718750 0.937500
+vt 0.734375 0.000000
+vt 0.687500 0.062500
+vt 0.687500 0.500000
+vt 0.703125 1.000000
+vt 0.687500 0.937500
+vt 0.703125 0.000000
+vt 0.687500 0.437500
+vt 0.687500 0.875000
+vt 0.687500 0.375000
+vt 0.687500 0.812500
+vt 0.687500 0.312500
+vt 0.687500 0.750000
+vt 0.687500 0.250000
+vt 0.687500 0.687500
+vt 0.687500 0.187500
+vt 0.687500 0.625000
+vt 0.687500 0.125000
+vt 0.687500 0.562500
+vt 0.656250 0.312500
+vt 0.656250 0.250000
+vt 0.656250 0.687500
+vt 0.656250 0.187500
+vt 0.656250 0.625000
+vt 0.656250 0.125000
+vt 0.656250 0.562500
+vt 0.656250 0.062500
+vt 0.656250 0.500000
+vt 0.671875 1.000000
+vt 0.656250 0.937500
+vt 0.671875 0.000000
+vt 0.656250 0.437500
+vt 0.656250 0.875000
+vt 0.656250 0.375000
+vt 0.656250 0.812500
+vt 0.656250 0.750000
+vt 0.640625 1.000000
+vt 0.625000 0.937500
+vt 0.640625 0.000000
+vt 0.625000 0.062500
+vt 0.625000 0.437500
+vt 0.625000 0.875000
+vt 0.625000 0.375000
+vt 0.625000 0.812500
+vt 0.625000 0.312500
+vt 0.625000 0.750000
+vt 0.625000 0.250000
+vt 0.625000 0.687500
+vt 0.625000 0.187500
+vt 0.625000 0.625000
+vt 0.625000 0.125000
+vt 0.625000 0.562500
+vt 0.625000 0.500000
+vt 0.593750 0.750000
+vt 0.593750 0.687500
+vt 0.593750 0.250000
+vt 0.593750 0.187500
+vt 0.593750 0.625000
+vt 0.593750 0.125000
+vt 0.593750 0.562500
+vt 0.593750 0.062500
+vt 0.593750 0.500000
+vt 0.609375 1.000000
+vt 0.593750 0.937500
+vt 0.609375 0.000000
+vt 0.593750 0.437500
+vt 0.593750 0.875000
+vt 0.593750 0.375000
+vt 0.593750 0.812500
+vt 0.593750 0.312500
+vt 0.562500 0.437500
+vt 0.562500 0.875000
+vt 0.562500 0.375000
+vt 0.562500 0.812500
+vt 0.562500 0.312500
+vt 0.562500 0.750000
+vt 0.562500 0.250000
+vt 0.562500 0.687500
+vt 0.562500 0.187500
+vt 0.562500 0.625000
+vt 0.562500 0.125000
+vt 0.562500 0.562500
+vt 0.562500 0.062500
+vt 0.562500 0.500000
+vt 0.578125 1.000000
+vt 0.562500 0.937500
+vt 0.578125 0.000000
+vt 0.531250 0.187500
+vt 0.531250 0.625000
+vt 0.531250 0.125000
+vt 0.531250 0.562500
+vt 0.531250 0.062500
+vt 0.531250 0.500000
+vt 0.546875 1.000000
+vt 0.531250 0.937500
+vt 0.546875 0.000000
+vt 0.531250 0.437500
+vt 0.531250 0.875000
+vt 0.531250 0.375000
+vt 0.531250 0.812500
+vt 0.531250 0.312500
+vt 0.531250 0.750000
+vt 0.531250 0.250000
+vt 0.531250 0.687500
+vt 0.500000 0.875000
+vt 0.500000 0.375000
+vt 0.500000 0.812500
+vt 0.500000 0.312500
+vt 0.500000 0.750000
+vt 0.500000 0.250000
+vt 0.500000 0.687500
+vt 0.500000 0.187500
+vt 0.500000 0.625000
+vt 0.500000 0.125000
+vt 0.500000 0.562500
+vt 0.500000 0.062500
+vt 0.500000 0.500000
+vt 0.515625 1.000000
+vt 0.500000 0.937500
+vt 0.515625 0.000000
+vt 0.500000 0.437500
+vt 0.468750 0.625000
+vt 0.468750 0.125000
+vt 0.468750 0.562500
+vt 0.468750 0.062500
+vt 0.468750 0.500000
+vt 0.484374 1.000000
+vt 0.468750 0.937500
+vt 0.484375 0.000000
+vt 0.468750 0.437500
+vt 0.468750 0.875000
+vt 0.468750 0.375000
+vt 0.468750 0.812500
+vt 0.468750 0.312500
+vt 0.468750 0.750000
+vt 0.468750 0.250000
+vt 0.468750 0.687500
+vt 0.468750 0.187500
+vt 0.437500 0.375000
+vt 0.437500 0.875000
+vt 0.437500 0.812500
+vt 0.437500 0.312500
+vt 0.437500 0.750000
+vt 0.437500 0.250000
+vt 0.437500 0.687500
+vt 0.437500 0.187500
+vt 0.437500 0.625000
+vt 0.437500 0.125000
+vt 0.437500 0.562500
+vt 0.437500 0.062500
+vt 0.437500 0.500000
+vt 0.453124 1.000000
+vt 0.437500 0.937500
+vt 0.453125 0.000000
+vt 0.437500 0.437500
+vt 0.406250 0.125000
+vt 0.406250 0.625000
+vt 0.406250 0.562500
+vt 0.406250 0.062500
+vt 0.406250 0.500000
+vt 0.421874 1.000000
+vt 0.406250 0.937500
+vt 0.421875 0.000000
+vt 0.406250 0.437500
+vt 0.406250 0.875000
+vt 0.406250 0.375000
+vt 0.406250 0.812500
+vt 0.406250 0.312500
+vt 0.406250 0.750000
+vt 0.406250 0.250000
+vt 0.406250 0.687500
+vt 0.406250 0.187500
+vt 0.375000 0.312500
+vt 0.375000 0.750000
+vt 0.375000 0.250000
+vt 0.375000 0.687500
+vt 0.375000 0.187500
+vt 0.375000 0.625000
+vt 0.375000 0.125000
+vt 0.375000 0.562500
+vt 0.375000 0.062500
+vt 0.375000 0.500000
+vt 0.390625 1.000000
+vt 0.375000 0.937500
+vt 0.390625 0.000000
+vt 0.375000 0.437500
+vt 0.375000 0.875000
+vt 0.375000 0.375000
+vt 0.375000 0.812500
+vt 0.343750 0.125000
+vt 0.343750 0.062500
+vt 0.343750 0.500000
+vt 0.359375 1.000000
+vt 0.343750 0.937500
+vt 0.359375 0.000000
+vt 0.343750 0.437500
+vt 0.343750 0.875000
+vt 0.343750 0.375000
+vt 0.343750 0.812500
+vt 0.343750 0.312500
+vt 0.343750 0.750000
+vt 0.343750 0.250000
+vt 0.343750 0.687500
+vt 0.343750 0.187500
+vt 0.343750 0.625000
+vt 0.343750 0.562500
+vt 0.312500 0.750000
+vt 0.312500 0.250000
+vt 0.312500 0.687500
+vt 0.312500 0.187500
+vt 0.312500 0.625000
+vt 0.312500 0.125000
+vt 0.312500 0.562500
+vt 0.312500 0.062500
+vt 0.312500 0.500000
+vt 0.328125 1.000000
+vt 0.312500 0.937500
+vt 0.328125 0.000000
+vt 0.312500 0.437500
+vt 0.312500 0.875000
+vt 0.312500 0.375000
+vt 0.312500 0.812500
+vt 0.312500 0.312500
+vt 0.281250 0.500000
+vt 0.296875 1.000000
+vt 0.281250 0.937500
+vt 0.296875 0.000000
+vt 0.281250 0.062500
+vt 0.281250 0.437500
+vt 0.281250 0.875000
+vt 0.281250 0.375000
+vt 0.281250 0.812500
+vt 0.281250 0.312500
+vt 0.281250 0.750000
+vt 0.281250 0.250000
+vt 0.281250 0.687500
+vt 0.281250 0.187500
+vt 0.281250 0.625000
+vt 0.281250 0.125000
+vt 0.281250 0.562500
+vt 0.250000 0.250000
+vt 0.250000 0.687500
+vt 0.250000 0.187500
+vt 0.250000 0.625000
+vt 0.250000 0.125000
+vt 0.250000 0.562500
+vt 0.250000 0.062500
+vt 0.250000 0.500000
+vt 0.265625 1.000000
+vt 0.250000 0.937500
+vt 0.265625 0.000000
+vt 0.250000 0.437500
+vt 0.250000 0.875000
+vt 0.250000 0.375000
+vt 0.250000 0.812500
+vt 0.250000 0.312500
+vt 0.250000 0.750000
+vt 0.234375 1.000000
+vt 0.218750 0.937500
+vt 0.234375 0.000000
+vt 0.218750 0.062500
+vt 0.218750 0.437500
+vt 0.218750 0.875000
+vt 0.218750 0.375000
+vt 0.218750 0.812500
+vt 0.218750 0.312500
+vt 0.218750 0.750000
+vt 0.218750 0.250000
+vt 0.218750 0.687500
+vt 0.218750 0.187500
+vt 0.218750 0.625000
+vt 0.218750 0.125000
+vt 0.218750 0.562500
+vt 0.218750 0.500000
+vt 0.187500 0.750000
+vt 0.187500 0.687500
+vt 0.187500 0.187500
+vt 0.187500 0.625000
+vt 0.187500 0.125000
+vt 0.187500 0.562500
+vt 0.187500 0.062500
+vt 0.187500 0.500000
+vt 0.203125 1.000000
+vt 0.187500 0.937500
+vt 0.203125 0.000000
+vt 0.187500 0.437500
+vt 0.187500 0.875000
+vt 0.187500 0.375000
+vt 0.187500 0.812500
+vt 0.187500 0.312500
+vt 0.187500 0.250000
+vt 0.156250 0.437500
+vt 0.156250 0.875000
+vt 0.156250 0.375000
+vt 0.156250 0.812500
+vt 0.156250 0.312500
+vt 0.156250 0.750000
+vt 0.156250 0.250000
+vt 0.156250 0.687500
+vt 0.156250 0.187500
+vt 0.156250 0.625000
+vt 0.156250 0.125000
+vt 0.156250 0.562500
+vt 0.156250 0.062500
+vt 0.156250 0.500000
+vt 0.171875 1.000000
+vt 0.156250 0.937500
+vt 0.171875 0.000000
+vt 0.125000 0.187500
+vt 0.125000 0.625000
+vt 0.125000 0.125000
+vt 0.125000 0.562500
+vt 0.125000 0.062500
+vt 0.125000 0.500000
+vt 0.140625 1.000000
+vt 0.125000 0.937500
+vt 0.140625 0.000000
+vt 0.125000 0.437500
+vt 0.125000 0.875000
+vt 0.125000 0.375000
+vt 0.125000 0.812500
+vt 0.125000 0.312500
+vt 0.125000 0.750000
+vt 0.125000 0.250000
+vt 0.125000 0.687500
+vt 0.093750 0.375000
+vt 0.093750 0.812500
+vt 0.093750 0.312500
+vt 0.093750 0.750000
+vt 0.093750 0.250000
+vt 0.093750 0.687500
+vt 0.093750 0.187500
+vt 0.093750 0.625000
+vt 0.093750 0.125000
+vt 0.093750 0.562500
+vt 0.093750 0.062500
+vt 0.093750 0.500000
+vt 0.109375 1.000000
+vt 0.093750 0.937500
+vt 0.109375 0.000000
+vt 0.093750 0.437500
+vt 0.093750 0.875000
+vt 0.062500 0.187500
+vt 0.062500 0.125000
+vt 0.062500 0.625000
+vt 0.062500 0.562500
+vt 0.062500 0.062500
+vt 0.062500 0.500000
+vt 0.078125 1.000000
+vt 0.062500 0.937500
+vt 0.078125 0.000000
+vt 0.062500 0.437500
+vt 0.062500 0.875000
+vt 0.062500 0.375000
+vt 0.062500 0.812500
+vt 0.062500 0.312500
+vt 0.062500 0.750000
+vt 0.062500 0.250000
+vt 0.062500 0.687500
+vt 0.031250 0.812500
+vt 0.031250 0.375000
+vt 0.031250 0.312500
+vt 0.031250 0.750000
+vt 0.031250 0.250000
+vt 0.031250 0.687500
+vt 0.031250 0.187500
+vt 0.031250 0.625000
+vt 0.031250 0.125000
+vt 0.031250 0.562500
+vt 0.031250 0.062500
+vt 0.031250 0.500000
+vt 0.046875 1.000000
+vt 0.031250 0.937500
+vt 0.046875 0.000000
+vt 0.031250 0.437500
+vt 0.031250 0.875000
+vt 0.000000 0.625000
+vt 0.000000 0.562500
+vt 0.000000 0.062500
+vt 0.000000 0.500000
+vt 0.015625 1.000000
+vt 0.000000 0.937500
+vt 0.015625 0.000000
+vt 0.000000 0.437500
+vt 0.000000 0.875000
+vt 0.000000 0.375000
+vt 0.000000 0.812500
+vt 0.000000 0.312500
+vt 0.000000 0.750000
+vt 0.000000 0.250000
+vt 0.000000 0.687500
+vt 0.000000 0.187500
+vt 0.000000 0.125000
+vt 1.000000 0.312500
+vt 0.968750 0.375000
+vt 0.968750 0.312500
+vt 1.000000 0.750000
+vt 0.968750 0.812500
+vt 0.968750 0.750000
+vt 0.968750 0.250000
+vt 1.000000 0.250000
+vt 1.000000 0.687500
+vt 0.968750 0.687500
+vt 0.968750 0.187500
+vt 1.000000 0.187500
+vt 0.968750 0.625000
+vt 1.000000 0.625000
+vt 1.000000 0.125000
+vt 0.968750 0.125000
+vt 1.000000 0.562500
+vt 0.968750 0.562500
+vt 0.968750 0.062500
+vt 1.000000 0.062500
+vt 0.968750 0.500000
+vt 1.000000 0.500000
+vt 1.000000 0.937500
+vt 0.984375 1.000000
+vt 0.968750 0.937500
+vt 0.984375 0.000000
+vt 1.000000 0.437500
+vt 0.968750 0.437500
+vt 1.000000 0.875000
+vt 0.968750 0.875000
+vt 1.000000 0.375000
+vt 1.000000 0.812500
+vt 0.937500 0.062500
+vt 0.937500 0.500000
+vt 0.953125 1.000000
+vt 0.937500 0.937500
+vt 0.953125 0.000000
+vt 0.937500 0.437500
+vt 0.937500 0.875000
+vt 0.937500 0.375000
+vt 0.937500 0.812500
+vt 0.937500 0.312500
+vt 0.937500 0.750000
+vt 0.937500 0.250000
+vt 0.937500 0.687500
+vt 0.937500 0.187500
+vt 0.937500 0.625000
+vt 0.937500 0.125000
+vt 0.937500 0.562500
+vt 0.906250 0.812500
+vt 0.906250 0.750000
+vt 0.906250 0.250000
+vt 0.906250 0.687500
+vt 0.906250 0.187500
+vt 0.906250 0.625000
+vt 0.906250 0.125000
+vt 0.906250 0.562500
+vt 0.906250 0.062500
+vt 0.906250 0.500000
+vt 0.921875 1.000000
+vt 0.906250 0.937500
+vt 0.921875 0.000000
+vt 0.906250 0.437500
+vt 0.906250 0.875000
+vt 0.906250 0.375000
+vt 0.906250 0.312500
+vt 0.875000 0.500000
+vt 0.890625 1.000000
+vt 0.875000 0.937500
+vt 0.890625 0.000000
+vt 0.875000 0.062500
+vt 0.875000 0.437500
+vt 0.875000 0.875000
+vt 0.875000 0.375000
+vt 0.875000 0.812500
+vt 0.875000 0.312500
+vt 0.875000 0.750000
+vt 0.875000 0.250000
+vt 0.875000 0.687500
+vt 0.875000 0.187500
+vt 0.875000 0.625000
+vt 0.875000 0.125000
+vt 0.875000 0.562500
+vt 0.843750 0.250000
+vt 0.843750 0.750000
+vt 0.843750 0.687500
+vt 0.843750 0.187500
+vt 0.843750 0.625000
+vt 0.843750 0.125000
+vt 0.843750 0.562500
+vt 0.843750 0.062500
+vt 0.843750 0.500000
+vt 0.859375 1.000000
+vt 0.843750 0.937500
+vt 0.859375 0.000000
+vt 0.843750 0.437500
+vt 0.843750 0.875000
+vt 0.843750 0.375000
+vt 0.843750 0.812500
+vt 0.843750 0.312500
+vt 0.828125 0.000000
+vt 0.812500 0.062500
+vt 0.812500 0.437500
+vt 0.812500 0.937500
+vt 0.812500 0.875000
+vt 0.812500 0.375000
+vt 0.812500 0.812500
+vt 0.812500 0.312500
+vt 0.812500 0.750000
+vt 0.812500 0.250000
+vt 0.812500 0.687500
+vt 0.812500 0.187500
+vt 0.812500 0.625000
+vt 0.812500 0.125000
+vt 0.812500 0.562500
+vt 0.812500 0.500000
+vt 0.828125 1.000000
+vt 0.781250 0.187500
+vt 0.781250 0.625000
+vt 0.781250 0.125000
+vt 0.781250 0.562500
+vt 0.781250 0.062500
+vt 0.781250 0.500000
+vt 0.796875 1.000000
+vt 0.781250 0.937500
+vt 0.796875 0.000000
+vt 0.781250 0.437500
+vt 0.781250 0.875000
+vt 0.781250 0.375000
+vt 0.781250 0.812500
+vt 0.781250 0.312500
+vt 0.781250 0.750000
+vt 0.781250 0.250000
+vt 0.781250 0.687500
+vt 0.765625 1.000000
+vt 0.765625 0.000000
+vn 0.0000 0.0000 -1.0000
+vn 0.1914 -0.1939 -0.9622
+vn 0.0000 -0.1939 -0.9810
+vn 0.0000 0.9796 -0.2010
+vn 0.0757 0.9217 -0.3804
+vn 0.0000 0.9217 -0.3879
+vn 0.1804 -0.3805 -0.9070
+vn 0.0000 -0.3805 -0.9247
+vn 0.0000 0.8286 -0.5598
+vn 0.1092 0.8286 -0.5490
+vn 0.1626 -0.5528 -0.8173
+vn 0.0000 -0.5528 -0.8333
+vn 0.1385 0.7040 -0.6965
+vn 0.0000 0.7040 -0.7101
+vn 0.1385 -0.7040 -0.6965
+vn 0.0000 -0.7040 -0.7101
+vn 0.1626 0.5528 -0.8173
+vn 0.0000 0.5528 -0.8333
+vn 0.1092 -0.8286 -0.5490
+vn 0.0000 -0.8286 -0.5598
+vn 0.1804 0.3805 -0.9070
+vn 0.0000 0.3805 -0.9247
+vn 0.0757 -0.9217 -0.3804
+vn 0.0000 -0.9217 -0.3879
+vn 0.1914 0.1939 -0.9622
+vn 0.0000 0.1939 -0.9810
+vn 0.0392 -0.9796 -0.1971
+vn 0.0000 -0.9796 -0.2010
+vn 0.1951 0.0000 -0.9808
+vn 0.0000 1.0000 0.0000
+vn 0.0392 0.9796 -0.1971
+vn 0.0000 -1.0000 0.0000
+vn 0.0769 -0.9796 -0.1856
+vn 0.3827 0.0000 -0.9239
+vn 0.0769 0.9796 -0.1856
+vn 0.3754 -0.1939 -0.9063
+vn 0.1484 0.9217 -0.3583
+vn 0.3539 -0.3805 -0.8544
+vn 0.2142 0.8286 -0.5171
+vn 0.3189 -0.5528 -0.7699
+vn 0.2717 0.7040 -0.6561
+vn 0.2717 -0.7040 -0.6561
+vn 0.3189 0.5528 -0.7699
+vn 0.2142 -0.8286 -0.5171
+vn 0.3539 0.3805 -0.8544
+vn 0.1484 -0.9217 -0.3583
+vn 0.3754 0.1939 -0.9063
+vn 0.4630 -0.5528 -0.6929
+vn 0.3945 -0.7040 -0.5904
+vn 0.4630 0.5528 -0.6929
+vn 0.3110 -0.8286 -0.4654
+vn 0.5137 0.3805 -0.7689
+vn 0.2155 -0.9217 -0.3225
+vn 0.5450 0.1939 -0.8157
+vn 0.1116 -0.9796 -0.1671
+vn 0.5556 0.0000 -0.8314
+vn 0.1116 0.9796 -0.1671
+vn 0.5450 -0.1939 -0.8157
+vn 0.2155 0.9217 -0.3225
+vn 0.5137 -0.3805 -0.7689
+vn 0.3110 0.8286 -0.4654
+vn 0.3945 0.7040 -0.5904
+vn 0.1421 0.9796 -0.1421
+vn 0.1421 -0.9796 -0.1421
+vn 0.6937 -0.1939 -0.6937
+vn 0.2743 0.9217 -0.2743
+vn 0.6539 -0.3805 -0.6539
+vn 0.3958 0.8286 -0.3958
+vn 0.5893 -0.5528 -0.5893
+vn 0.5021 0.7040 -0.5021
+vn 0.5021 -0.7040 -0.5021
+vn 0.5893 0.5528 -0.5893
+vn 0.3958 -0.8286 -0.3958
+vn 0.6539 0.3805 -0.6539
+vn 0.2743 -0.9217 -0.2743
+vn 0.6937 0.1939 -0.6937
+vn 0.7071 0.0000 -0.7071
+vn 0.5904 0.7040 -0.3945
+vn 0.6929 0.5528 -0.4630
+vn 0.5904 -0.7040 -0.3945
+vn 0.4654 -0.8286 -0.3110
+vn 0.7689 0.3805 -0.5137
+vn 0.3225 -0.9217 -0.2155
+vn 0.8157 0.1939 -0.5450
+vn 0.1671 -0.9796 -0.1116
+vn 0.8314 0.0000 -0.5556
+vn 0.1671 0.9796 -0.1116
+vn 0.8157 -0.1939 -0.5450
+vn 0.3225 0.9217 -0.2155
+vn 0.7689 -0.3805 -0.5137
+vn 0.4654 0.8286 -0.3110
+vn 0.6929 -0.5528 -0.4630
+vn 0.9063 -0.1939 -0.3754
+vn 0.3583 0.9217 -0.1484
+vn 0.8544 -0.3805 -0.3539
+vn 0.5171 0.8286 -0.2142
+vn 0.7699 -0.5528 -0.3189
+vn 0.6561 0.7040 -0.2717
+vn 0.6561 -0.7040 -0.2717
+vn 0.7699 0.5528 -0.3189
+vn 0.5171 -0.8286 -0.2142
+vn 0.8544 0.3805 -0.3539
+vn 0.3583 -0.9217 -0.1484
+vn 0.9063 0.1939 -0.3754
+vn 0.1856 -0.9796 -0.0769
+vn 0.9239 0.0000 -0.3827
+vn 0.1856 0.9796 -0.0769
+vn 0.5490 -0.8286 -0.1092
+vn 0.9070 0.3805 -0.1804
+vn 0.3804 -0.9217 -0.0757
+vn 0.9622 0.1939 -0.1914
+vn 0.1971 -0.9796 -0.0392
+vn 0.9808 0.0000 -0.1951
+vn 0.1971 0.9796 -0.0392
+vn 0.9622 -0.1939 -0.1914
+vn 0.3804 0.9217 -0.0757
+vn 0.9070 -0.3805 -0.1804
+vn 0.5490 0.8286 -0.1092
+vn 0.8173 -0.5528 -0.1626
+vn 0.6965 0.7040 -0.1385
+vn 0.6965 -0.7040 -0.1385
+vn 0.8173 0.5528 -0.1626
+vn 0.3879 0.9217 0.0000
+vn 0.9247 -0.3805 0.0000
+vn 0.5598 0.8286 0.0000
+vn 0.8333 -0.5528 0.0000
+vn 0.7101 0.7040 0.0000
+vn 0.7101 -0.7040 0.0000
+vn 0.8333 0.5528 0.0000
+vn 0.5598 -0.8286 0.0000
+vn 0.9247 0.3805 0.0000
+vn 0.3879 -0.9217 0.0000
+vn 0.9810 0.1939 0.0000
+vn 0.2010 -0.9796 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.2010 0.9796 0.0000
+vn 0.9810 -0.1939 0.0000
+vn 0.9070 0.3805 0.1804
+vn 0.3804 -0.9217 0.0757
+vn 0.9622 0.1939 0.1914
+vn 0.1971 -0.9796 0.0392
+vn 0.9808 0.0000 0.1951
+vn 0.1971 0.9796 0.0392
+vn 0.9622 -0.1939 0.1914
+vn 0.3804 0.9217 0.0757
+vn 0.9070 -0.3805 0.1804
+vn 0.5490 0.8286 0.1092
+vn 0.8173 -0.5528 0.1626
+vn 0.6965 0.7040 0.1385
+vn 0.6965 -0.7040 0.1385
+vn 0.8173 0.5528 0.1626
+vn 0.5490 -0.8286 0.1092
+vn 0.8544 -0.3805 0.3539
+vn 0.3583 0.9217 0.1484
+vn 0.5171 0.8286 0.2142
+vn 0.7699 -0.5528 0.3189
+vn 0.6561 0.7040 0.2717
+vn 0.6561 -0.7040 0.2717
+vn 0.7699 0.5528 0.3189
+vn 0.5171 -0.8286 0.2142
+vn 0.8544 0.3805 0.3539
+vn 0.3583 -0.9217 0.1484
+vn 0.9063 0.1939 0.3754
+vn 0.1856 -0.9796 0.0769
+vn 0.9239 0.0000 0.3827
+vn 0.1856 0.9796 0.0769
+vn 0.9063 -0.1939 0.3754
+vn 0.3225 -0.9217 0.2155
+vn 0.7689 0.3805 0.5137
+vn 0.8157 0.1939 0.5450
+vn 0.1671 -0.9796 0.1116
+vn 0.8314 0.0000 0.5556
+vn 0.1671 0.9796 0.1116
+vn 0.8157 -0.1939 0.5450
+vn 0.3225 0.9217 0.2155
+vn 0.7689 -0.3805 0.5137
+vn 0.4654 0.8286 0.3110
+vn 0.6929 -0.5528 0.4630
+vn 0.5904 0.7040 0.3945
+vn 0.5904 -0.7040 0.3945
+vn 0.6929 0.5528 0.4630
+vn 0.4654 -0.8286 0.3110
+vn 0.5893 -0.5528 0.5893
+vn 0.5021 0.7040 0.5021
+vn 0.5021 -0.7040 0.5021
+vn 0.5893 0.5528 0.5893
+vn 0.3958 -0.8286 0.3958
+vn 0.6539 0.3805 0.6539
+vn 0.2743 -0.9217 0.2743
+vn 0.6937 0.1939 0.6937
+vn 0.1421 -0.9796 0.1421
+vn 0.7071 0.0000 0.7071
+vn 0.1421 0.9796 0.1421
+vn 0.6937 -0.1939 0.6937
+vn 0.2743 0.9217 0.2743
+vn 0.6539 -0.3805 0.6539
+vn 0.3958 0.8286 0.3958
+vn 0.2155 -0.9217 0.3225
+vn 0.1116 -0.9796 0.1671
+vn 0.5556 0.0000 0.8314
+vn 0.1116 0.9796 0.1671
+vn 0.5450 -0.1939 0.8157
+vn 0.2155 0.9217 0.3225
+vn 0.5137 -0.3805 0.7689
+vn 0.3110 0.8286 0.4654
+vn 0.4630 -0.5528 0.6929
+vn 0.3945 0.7040 0.5904
+vn 0.3945 -0.7040 0.5904
+vn 0.4630 0.5528 0.6929
+vn 0.3110 -0.8286 0.4654
+vn 0.5137 0.3805 0.7689
+vn 0.5450 0.1939 0.8157
+vn 0.2717 0.7040 0.6561
+vn 0.2717 -0.7040 0.6561
+vn 0.3189 0.5528 0.7699
+vn 0.2142 -0.8286 0.5171
+vn 0.3539 0.3805 0.8544
+vn 0.1484 -0.9217 0.3583
+vn 0.3754 0.1939 0.9063
+vn 0.0769 -0.9796 0.1856
+vn 0.3827 0.0000 0.9239
+vn 0.0769 0.9796 0.1856
+vn 0.3754 -0.1939 0.9063
+vn 0.1484 0.9217 0.3583
+vn 0.3539 -0.3805 0.8544
+vn 0.2142 0.8286 0.5171
+vn 0.3189 -0.5528 0.7699
+vn 0.1951 0.0000 0.9808
+vn 0.0392 0.9796 0.1971
+vn 0.0392 -0.9796 0.1971
+vn 0.1914 -0.1939 0.9622
+vn 0.0757 0.9217 0.3804
+vn 0.1804 -0.3805 0.9070
+vn 0.1092 0.8286 0.5490
+vn 0.1626 -0.5528 0.8173
+vn 0.1385 0.7040 0.6965
+vn 0.1385 -0.7040 0.6965
+vn 0.1626 0.5528 0.8173
+vn 0.1092 -0.8286 0.5490
+vn 0.1804 0.3805 0.9070
+vn 0.0757 -0.9217 0.3804
+vn 0.1914 0.1939 0.9622
+vn 0.0000 -0.7040 0.7101
+vn 0.0000 0.5528 0.8333
+vn 0.0000 -0.8286 0.5598
+vn 0.0000 0.3805 0.9247
+vn 0.0000 -0.9217 0.3879
+vn 0.0000 0.1939 0.9810
+vn 0.0000 -0.9796 0.2010
+vn 0.0000 0.0000 1.0000
+vn 0.0000 0.9796 0.2010
+vn 0.0000 -0.1939 0.9810
+vn 0.0000 0.9217 0.3879
+vn 0.0000 -0.3805 0.9247
+vn 0.0000 0.8286 0.5598
+vn 0.0000 -0.5528 0.8333
+vn 0.0000 0.7040 0.7101
+vn -0.0392 0.9796 0.1971
+vn -0.0392 -0.9796 0.1971
+vn -0.1914 -0.1939 0.9622
+vn -0.0757 0.9217 0.3804
+vn -0.1804 -0.3805 0.9070
+vn -0.1092 0.8286 0.5490
+vn -0.1626 -0.5528 0.8173
+vn -0.1385 0.7040 0.6965
+vn -0.1385 -0.7040 0.6965
+vn -0.1626 0.5528 0.8173
+vn -0.1092 -0.8286 0.5490
+vn -0.1804 0.3805 0.9070
+vn -0.0757 -0.9217 0.3804
+vn -0.1914 0.1939 0.9622
+vn -0.1951 0.0000 0.9808
+vn -0.2717 0.7040 0.6561
+vn -0.3189 0.5528 0.7699
+vn -0.2142 -0.8286 0.5171
+vn -0.3539 0.3805 0.8544
+vn -0.1484 -0.9217 0.3583
+vn -0.3754 0.1939 0.9063
+vn -0.0769 -0.9796 0.1856
+vn -0.3827 0.0000 0.9239
+vn -0.0769 0.9796 0.1856
+vn -0.3754 -0.1939 0.9063
+vn -0.1484 0.9217 0.3583
+vn -0.3539 -0.3805 0.8544
+vn -0.2142 0.8286 0.5171
+vn -0.3189 -0.5528 0.7699
+vn -0.2717 -0.7040 0.6561
+vn -0.5450 -0.1939 0.8157
+vn -0.2155 0.9217 0.3225
+vn -0.5137 -0.3805 0.7689
+vn -0.3110 0.8286 0.4654
+vn -0.4630 -0.5528 0.6929
+vn -0.3945 0.7040 0.5904
+vn -0.3945 -0.7040 0.5904
+vn -0.4630 0.5528 0.6929
+vn -0.3110 -0.8286 0.4654
+vn -0.5137 0.3805 0.7689
+vn -0.2155 -0.9217 0.3225
+vn -0.5450 0.1939 0.8157
+vn -0.1116 -0.9796 0.1671
+vn -0.5556 0.0000 0.8314
+vn -0.1116 0.9796 0.1671
+vn -0.3958 -0.8286 0.3958
+vn -0.6539 0.3805 0.6539
+vn -0.2743 -0.9217 0.2743
+vn -0.6937 0.1939 0.6937
+vn -0.1421 -0.9796 0.1421
+vn -0.7071 0.0000 0.7071
+vn -0.1421 0.9796 0.1421
+vn -0.6937 -0.1939 0.6937
+vn -0.2743 0.9217 0.2743
+vn -0.6539 -0.3805 0.6539
+vn -0.3958 0.8286 0.3958
+vn -0.5893 -0.5528 0.5893
+vn -0.5021 0.7040 0.5021
+vn -0.5021 -0.7040 0.5021
+vn -0.5893 0.5528 0.5893
+vn -0.7689 -0.3805 0.5137
+vn -0.4654 0.8286 0.3110
+vn -0.6929 -0.5528 0.4630
+vn -0.5904 0.7040 0.3945
+vn -0.5904 -0.7040 0.3945
+vn -0.6929 0.5528 0.4630
+vn -0.4654 -0.8286 0.3110
+vn -0.7689 0.3805 0.5137
+vn -0.3225 -0.9217 0.2155
+vn -0.8157 0.1939 0.5450
+vn -0.1671 -0.9796 0.1116
+vn -0.8314 0.0000 0.5556
+vn -0.1671 0.9796 0.1116
+vn -0.8157 -0.1939 0.5450
+vn -0.3225 0.9217 0.2155
+vn -0.5171 -0.8286 0.2142
+vn -0.3583 -0.9217 0.1484
+vn -0.8544 0.3805 0.3539
+vn -0.9063 0.1939 0.3754
+vn -0.1856 -0.9796 0.0769
+vn -0.9239 0.0000 0.3827
+vn -0.1856 0.9796 0.0769
+vn -0.9063 -0.1939 0.3754
+vn -0.3583 0.9217 0.1484
+vn -0.8544 -0.3805 0.3539
+vn -0.5171 0.8286 0.2142
+vn -0.7699 -0.5528 0.3189
+vn -0.6561 0.7040 0.2717
+vn -0.6561 -0.7040 0.2717
+vn -0.7699 0.5528 0.3189
+vn -0.5490 0.8286 0.1092
+vn -0.9070 -0.3805 0.1804
+vn -0.8173 -0.5528 0.1626
+vn -0.6965 0.7040 0.1385
+vn -0.6965 -0.7040 0.1385
+vn -0.8173 0.5528 0.1626
+vn -0.5490 -0.8286 0.1092
+vn -0.9070 0.3805 0.1804
+vn -0.3804 -0.9217 0.0757
+vn -0.9622 0.1939 0.1914
+vn -0.1971 -0.9796 0.0392
+vn -0.9808 0.0000 0.1951
+vn -0.1971 0.9796 0.0392
+vn -0.9622 -0.1939 0.1914
+vn -0.3804 0.9217 0.0757
+vn -0.9247 0.3805 0.0000
+vn -0.9810 0.1939 0.0000
+vn -0.2010 -0.9796 0.0000
+vn -1.0000 0.0000 0.0000
+vn -0.2010 0.9796 0.0000
+vn -0.9810 -0.1939 0.0000
+vn -0.3879 0.9217 0.0000
+vn -0.9247 -0.3805 0.0000
+vn -0.5598 0.8286 0.0000
+vn -0.8333 -0.5528 0.0000
+vn -0.7101 0.7040 0.0000
+vn -0.7101 -0.7040 0.0000
+vn -0.8333 0.5528 0.0000
+vn -0.5598 -0.8286 0.0000
+vn -0.3879 -0.9217 0.0000
+vn -0.9070 -0.3805 -0.1804
+vn -0.8173 -0.5528 -0.1626
+vn -0.5490 0.8286 -0.1092
+vn -0.6965 0.7040 -0.1385
+vn -0.6965 -0.7040 -0.1385
+vn -0.8173 0.5528 -0.1626
+vn -0.5490 -0.8286 -0.1092
+vn -0.9070 0.3805 -0.1804
+vn -0.3804 -0.9217 -0.0757
+vn -0.9622 0.1939 -0.1914
+vn -0.1971 -0.9796 -0.0392
+vn -0.9808 0.0000 -0.1951
+vn -0.1971 0.9796 -0.0392
+vn -0.9622 -0.1939 -0.1914
+vn -0.3804 0.9217 -0.0757
+vn -0.1856 -0.9796 -0.0769
+vn -0.9239 0.0000 -0.3827
+vn -0.1856 0.9796 -0.0769
+vn -0.9063 -0.1939 -0.3754
+vn -0.3583 0.9217 -0.1484
+vn -0.8544 -0.3805 -0.3539
+vn -0.5171 0.8286 -0.2142
+vn -0.7699 -0.5528 -0.3189
+vn -0.6561 0.7040 -0.2717
+vn -0.6561 -0.7040 -0.2717
+vn -0.7699 0.5528 -0.3189
+vn -0.5171 -0.8286 -0.2142
+vn -0.8544 0.3805 -0.3539
+vn -0.3583 -0.9217 -0.1484
+vn -0.9063 0.1939 -0.3754
+vn -0.4654 0.8286 -0.3110
+vn -0.5904 0.7040 -0.3945
+vn -0.5904 -0.7040 -0.3945
+vn -0.6929 0.5528 -0.4630
+vn -0.4654 -0.8286 -0.3110
+vn -0.7689 0.3805 -0.5137
+vn -0.3225 -0.9217 -0.2155
+vn -0.8157 0.1939 -0.5450
+vn -0.1671 -0.9796 -0.1116
+vn -0.8314 0.0000 -0.5556
+vn -0.1671 0.9796 -0.1116
+vn -0.8157 -0.1939 -0.5450
+vn -0.3225 0.9217 -0.2155
+vn -0.7689 -0.3805 -0.5137
+vn -0.6929 -0.5528 -0.4630
+vn -0.7071 0.0000 -0.7071
+vn -0.1421 0.9796 -0.1421
+vn -0.1421 -0.9796 -0.1421
+vn -0.6937 -0.1939 -0.6937
+vn -0.2743 0.9217 -0.2743
+vn -0.6539 -0.3805 -0.6539
+vn -0.3958 0.8286 -0.3958
+vn -0.5893 -0.5528 -0.5893
+vn -0.5021 0.7040 -0.5021
+vn -0.5021 -0.7040 -0.5021
+vn -0.5893 0.5528 -0.5893
+vn -0.3958 -0.8286 -0.3958
+vn -0.6539 0.3805 -0.6539
+vn -0.2743 -0.9217 -0.2743
+vn -0.6937 0.1939 -0.6937
+vn -0.3945 -0.7040 -0.5904
+vn -0.3945 0.7040 -0.5904
+vn -0.4630 0.5528 -0.6929
+vn -0.3110 -0.8286 -0.4654
+vn -0.5137 0.3805 -0.7689
+vn -0.2155 -0.9217 -0.3225
+vn -0.5450 0.1939 -0.8157
+vn -0.1116 -0.9796 -0.1671
+vn -0.5556 0.0000 -0.8314
+vn -0.1116 0.9796 -0.1671
+vn -0.5450 -0.1939 -0.8157
+vn -0.2155 0.9217 -0.3225
+vn -0.5137 -0.3805 -0.7689
+vn -0.3110 0.8286 -0.4654
+vn -0.4630 -0.5528 -0.6929
+vn -0.0769 -0.9796 -0.1856
+vn -0.3754 -0.1939 -0.9063
+vn -0.0769 0.9796 -0.1856
+vn -0.1484 0.9217 -0.3583
+vn -0.3539 -0.3805 -0.8544
+vn -0.2142 0.8286 -0.5171
+vn -0.3189 -0.5528 -0.7699
+vn -0.2717 0.7040 -0.6561
+vn -0.2717 -0.7040 -0.6561
+vn -0.3189 0.5528 -0.7699
+vn -0.2142 -0.8286 -0.5171
+vn -0.3539 0.3805 -0.8544
+vn -0.1484 -0.9217 -0.3583
+vn -0.3754 0.1939 -0.9063
+vn -0.3827 0.0000 -0.9239
+vn -0.1092 -0.8286 -0.5490
+vn -0.1804 0.3805 -0.9070
+vn -0.0757 -0.9217 -0.3804
+vn -0.1914 0.1939 -0.9622
+vn -0.0392 -0.9796 -0.1971
+vn -0.1951 0.0000 -0.9808
+vn -0.0392 0.9796 -0.1971
+vn -0.1914 -0.1939 -0.9622
+vn -0.0757 0.9217 -0.3804
+vn -0.1804 -0.3805 -0.9070
+vn -0.1092 0.8286 -0.5490
+vn -0.1626 -0.5528 -0.8173
+vn -0.1385 0.7040 -0.6965
+vn -0.1385 -0.7040 -0.6965
+vn -0.1626 0.5528 -0.8173
+usemtl Material.001
+s 1
+f 8/1/1 19/2/2 9/3/3
+f 1/4/4 12/5/5 2/6/6
+f 9/3/3 20/7/7 478/8/8
+f 3/9/9 12/5/5 13/10/10
+f 478/8/8 21/11/11 479/12/12
+f 3/9/9 14/13/13 4/14/14
+f 479/12/12 22/15/15 480/16/16
+f 4/14/14 15/17/17 5/18/18
+f 480/16/16 23/19/19 10/20/20
+f 5/18/18 16/21/21 6/22/22
+f 10/20/20 24/23/23 481/24/24
+f 6/22/22 17/25/25 7/26/26
+f 481/24/24 25/27/27 482/28/28
+f 7/26/26 18/29/29 8/1/1
+f 1/4/4 297/30/30 11/31/31
+f 206/32/32 482/28/28 25/27/27
+f 24/23/23 40/33/33 25/27/27
+f 17/25/25 33/34/34 18/29/29
+f 11/31/31 297/35/30 26/36/35
+f 206/37/32 25/27/27 40/33/33
+f 19/2/2 33/34/34 34/38/36
+f 11/31/31 27/39/37 12/5/5
+f 20/7/7 34/38/36 35/40/38
+f 12/5/5 28/41/39 13/10/10
+f 20/7/7 36/42/40 21/11/11
+f 13/10/10 29/43/41 14/13/13
+f 22/15/15 36/42/40 37/44/42
+f 14/13/13 30/45/43 15/17/17
+f 22/15/15 38/46/44 23/19/19
+f 15/17/17 31/47/45 16/21/21
+f 23/19/19 39/48/46 24/23/23
+f 16/21/21 32/49/47 17/25/25
+f 37/44/42 51/50/48 52/51/49
+f 29/43/41 45/52/50 30/45/43
+f 37/44/42 53/53/51 38/46/44
+f 30/45/43 46/54/52 31/47/45
+f 38/46/44 54/55/53 39/48/46
+f 32/49/47 46/54/52 47/56/54
+f 39/48/46 55/57/55 40/33/33
+f 32/49/47 48/58/56 33/34/34
+f 26/36/35 297/59/30 41/60/57
+f 206/61/32 40/33/33 55/57/55
+f 33/34/34 49/62/58 34/38/36
+f 26/36/35 42/63/59 27/39/37
+f 34/38/36 50/64/60 35/40/38
+f 27/39/37 43/65/61 28/41/39
+f 36/42/40 50/64/60 51/50/48
+f 28/41/39 44/66/62 29/43/41
+f 41/60/57 297/67/30 56/68/63
+f 206/69/32 55/57/55 70/70/64
+f 48/58/56 64/71/65 49/62/58
+f 41/60/57 57/72/66 42/63/59
+f 49/62/58 65/73/67 50/64/60
+f 42/63/59 58/74/68 43/65/61
+f 51/50/48 65/73/67 66/75/69
+f 43/65/61 59/76/70 44/66/62
+f 51/50/48 67/77/71 52/51/49
+f 44/66/62 60/78/72 45/52/50
+f 52/51/49 68/79/73 53/53/51
+f 45/52/50 61/80/74 46/54/52
+f 53/53/51 69/81/75 54/55/53
+f 46/54/52 62/82/76 47/56/54
+f 54/55/53 70/70/64 55/57/55
+f 48/58/56 62/82/76 63/83/77
+f 60/78/72 74/84/78 75/85/79
+f 68/79/73 82/86/80 83/87/81
+f 60/78/72 76/88/82 61/80/74
+f 69/81/75 83/87/81 84/89/83
+f 61/80/74 77/90/84 62/82/76
+f 69/81/75 85/91/85 70/70/64
+f 63/83/77 77/90/84 78/92/86
+f 56/68/63 297/93/30 71/94/87
+f 206/95/32 70/70/64 85/91/85
+f 63/83/77 79/96/88 64/71/65
+f 56/68/63 72/97/89 57/72/66
+f 64/71/65 80/98/90 65/73/67
+f 57/72/66 73/99/91 58/74/68
+f 66/75/69 80/98/90 81/100/92
+f 58/74/68 74/84/78 59/76/70
+f 66/75/69 82/86/80 67/77/71
+f 78/92/86 94/101/93 79/96/88
+f 71/94/87 87/102/94 72/97/89
+f 79/96/88 95/103/95 80/98/90
+f 72/97/89 88/104/96 73/99/91
+f 81/100/92 95/103/95 96/105/97
+f 73/99/91 89/106/98 74/84/78
+f 82/86/80 96/105/97 97/107/99
+f 75/85/79 89/106/98 90/108/100
+f 82/86/80 98/109/101 83/87/81
+f 75/85/79 91/110/102 76/88/82
+f 84/89/83 98/109/101 99/111/103
+f 77/90/84 91/110/102 92/112/104
+f 84/89/83 100/113/105 85/91/85
+f 77/90/84 93/114/106 78/92/86
+f 71/94/87 297/115/30 86/116/107
+f 206/117/32 85/91/85 100/113/105
+f 97/107/99 113/118/108 98/109/101
+f 90/108/100 106/119/109 91/110/102
+f 98/109/101 114/120/110 99/111/103
+f 92/112/104 106/119/109 107/121/111
+f 100/113/105 114/120/110 115/122/112
+f 92/112/104 108/123/113 93/114/106
+f 86/116/107 297/124/30 101/125/114
+f 206/126/32 100/113/105 115/122/112
+f 93/114/106 109/127/115 94/101/93
+f 86/116/107 102/128/116 87/102/94
+f 94/101/93 110/129/117 95/103/95
+f 87/102/94 103/130/118 88/104/96
+f 96/105/97 110/129/117 111/131/119
+f 89/106/98 103/130/118 104/132/120
+f 97/107/99 111/131/119 112/133/121
+f 89/106/98 105/134/122 90/108/100
+f 101/125/114 117/135/123 102/128/116
+f 109/127/115 125/136/124 110/129/117
+f 102/128/116 118/137/125 103/130/118
+f 111/131/119 125/136/124 126/138/126
+f 103/130/118 119/139/127 104/132/120
+f 111/131/119 127/140/128 112/133/121
+f 104/132/120 120/141/129 105/134/122
+f 113/118/108 127/140/128 128/142/130
+f 105/134/122 121/143/131 106/119/109
+f 114/120/110 128/142/130 129/144/132
+f 107/121/111 121/143/131 122/145/133
+f 115/122/112 129/144/132 130/146/134
+f 107/121/111 123/147/135 108/123/113
+f 101/125/114 297/148/30 116/149/136
+f 206/150/32 115/122/112 130/146/134
+f 109/127/115 123/147/135 124/151/137
+f 120/141/129 136/152/138 121/143/131
+f 128/142/130 144/153/139 129/144/132
+f 122/145/133 136/152/138 137/154/140
+f 130/146/134 144/153/139 145/155/141
+f 122/145/133 138/156/142 123/147/135
+f 116/149/136 297/157/30 131/158/143
+f 206/159/32 130/146/134 145/155/141
+f 123/147/135 139/160/144 124/151/137
+f 117/135/123 131/158/143 132/161/145
+f 124/151/137 140/162/146 125/136/124
+f 117/135/123 133/163/147 118/137/125
+f 126/138/126 140/162/146 141/164/148
+f 118/137/125 134/165/149 119/139/127
+f 126/138/126 142/166/150 127/140/128
+f 120/141/129 134/165/149 135/167/151
+f 128/142/130 142/166/150 143/168/152
+f 139/160/144 155/169/153 140/162/146
+f 133/163/147 147/170/154 148/171/155
+f 141/164/148 155/169/153 156/172/156
+f 133/163/147 149/173/157 134/165/149
+f 141/164/148 157/174/158 142/166/150
+f 134/165/149 150/175/159 135/167/151
+f 142/166/150 158/176/160 143/168/152
+f 135/167/151 151/177/161 136/152/138
+f 144/153/139 158/176/160 159/178/162
+f 137/154/140 151/177/161 152/179/163
+f 144/153/139 160/180/164 145/155/141
+f 137/154/140 153/181/165 138/156/142
+f 131/158/143 297/182/30 146/183/166
+f 206/184/32 145/155/141 160/180/164
+f 138/156/142 154/185/167 139/160/144
+f 131/158/143 147/170/154 132/161/145
+f 158/176/160 174/186/168 159/178/162
+f 152/179/163 166/187/169 167/188/170
+f 159/178/162 175/189/171 160/180/164
+f 152/179/163 168/190/172 153/181/165
+f 146/183/166 297/191/30 161/192/173
+f 206/193/32 160/180/164 175/189/171
+f 154/185/167 168/190/172 169/194/174
+f 146/183/166 162/195/175 147/170/154
+f 154/185/167 170/196/176 155/169/153
+f 147/170/154 163/197/177 148/171/155
+f 156/172/156 170/196/176 171/198/178
+f 148/171/155 164/199/179 149/173/157
+f 156/172/156 172/200/180 157/174/158
+f 150/175/159 164/199/179 165/201/181
+f 158/176/160 172/200/180 173/202/182
+f 150/175/159 166/187/169 151/177/161
+f 170/196/176 186/203/183 171/198/178
+f 163/197/177 179/204/184 164/199/179
+f 171/198/178 187/205/185 172/200/180
+f 164/199/179 180/206/186 165/201/181
+f 173/202/182 187/205/185 188/207/187
+f 165/201/181 181/208/188 166/187/169
+f 173/202/182 189/209/189 174/186/168
+f 167/188/170 181/208/188 182/210/190
+f 175/189/171 189/209/189 190/211/191
+f 167/188/170 183/212/192 168/190/172
+f 161/192/173 297/213/30 176/214/193
+f 206/215/32 175/189/171 190/211/191
+f 168/190/172 184/216/194 169/194/174
+f 161/192/173 177/217/195 162/195/175
+f 169/194/174 185/218/196 170/196/176
+f 162/195/175 178/219/197 163/197/177
+f 190/211/191 204/220/198 205/221/199
+f 182/210/190 198/222/200 183/212/192
+f 176/214/193 297/223/30 191/224/201
+f 206/225/32 190/211/191 205/221/199
+f 184/216/194 198/222/200 199/226/202
+f 176/214/193 192/227/203 177/217/195
+f 184/216/194 200/228/204 185/218/196
+f 177/217/195 193/229/205 178/219/197
+f 186/203/183 200/228/204 201/230/206
+f 179/204/184 193/229/205 194/231/207
+f 186/203/183 202/232/208 187/205/185
+f 180/206/186 194/231/207 195/233/209
+f 188/207/187 202/232/208 203/234/210
+f 180/206/186 196/235/211 181/208/188
+f 188/207/187 204/220/198 189/209/189
+f 182/210/190 196/235/211 197/236/212
+f 193/229/205 210/237/213 194/231/207
+f 201/230/206 218/238/214 202/232/208
+f 194/231/207 211/239/215 195/233/209
+f 203/234/210 218/238/214 219/240/216
+f 195/233/209 212/241/217 196/235/211
+f 203/234/210 220/242/218 204/220/198
+f 197/236/212 212/241/217 213/243/219
+f 204/220/198 221/244/220 205/221/199
+f 197/236/212 214/245/221 198/222/200
+f 191/224/201 297/246/30 207/247/222
+f 206/248/32 205/221/199 221/244/220
+f 198/222/200 215/249/223 199/226/202
+f 191/224/201 208/250/224 192/227/203
+f 199/226/202 216/251/225 200/228/204
+f 193/229/205 208/250/224 209/252/226
+f 201/230/206 216/251/225 217/253/227
+f 213/243/219 229/254/228 214/245/221
+f 207/247/222 297/255/30 222/256/229
+f 206/257/32 221/244/220 236/258/230
+f 214/245/221 230/259/231 215/249/223
+f 207/247/222 223/260/232 208/250/224
+f 215/249/223 231/261/233 216/251/225
+f 208/250/224 224/262/234 209/252/226
+f 217/253/227 231/261/233 232/263/235
+f 209/252/226 225/264/236 210/237/213
+f 217/253/227 233/265/237 218/238/214
+f 210/237/213 226/266/238 211/239/215
+f 218/238/214 234/267/239 219/240/216
+f 211/239/215 227/268/240 212/241/217
+f 219/240/216 235/269/241 220/242/218
+f 213/243/219 227/268/240 228/270/242
+f 221/244/220 235/269/241 236/258/230
+f 232/263/235 248/271/243 233/265/237
+f 225/264/236 241/272/244 226/266/238
+f 234/267/239 248/271/243 249/273/245
+f 226/266/238 242/274/246 227/268/240
+f 234/267/239 250/275/247 235/269/241
+f 228/270/242 242/274/246 243/276/248
+f 236/258/230 250/275/247 251/277/249
+f 228/270/242 244/278/250 229/254/228
+f 222/256/229 297/279/30 237/280/251
+f 206/281/32 236/258/230 251/277/249
+f 229/254/228 245/282/252 230/259/231
+f 222/256/229 238/283/253 223/260/232
+f 230/259/231 246/284/254 231/261/233
+f 224/262/234 238/283/253 239/285/255
+f 232/263/235 246/284/254 247/286/256
+f 225/264/236 239/285/255 240/287/257
+f 237/280/251 297/288/30 252/289/258
+f 206/290/32 251/277/249 266/291/259
+f 244/278/250 260/292/260 245/282/252
+f 237/280/251 253/293/261 238/283/253
+f 245/282/252 261/294/262 246/284/254
+f 238/283/253 254/295/263 239/285/255
+f 247/286/256 261/294/262 262/296/264
+f 240/287/257 254/295/263 255/297/265
+f 247/286/256 263/298/266 248/271/243
+f 241/272/244 255/297/265 256/299/267
+f 248/271/243 264/300/268 249/273/245
+f 241/272/244 257/301/269 242/274/246
+f 249/273/245 265/302/270 250/275/247
+f 243/276/248 257/301/269 258/303/271
+f 250/275/247 266/291/259 251/277/249
+f 243/276/248 259/304/272 244/278/250
+f 256/299/267 270/305/273 271/306/274
+f 263/298/266 279/307/275 264/300/268
+f 256/299/267 272/308/276 257/301/269
+f 265/302/270 279/307/275 280/309/277
+f 258/303/271 272/308/276 273/310/278
+f 266/291/259 280/309/277 281/311/279
+f 258/303/271 274/312/280 259/304/272
+f 252/289/258 297/313/30 267/314/281
+f 206/315/32 266/291/259 281/311/279
+f 260/292/260 274/312/280 275/316/282
+f 252/289/258 268/317/283 253/293/261
+f 260/292/260 276/318/284 261/294/262
+f 253/293/261 269/319/285 254/295/263
+f 262/296/264 276/318/284 277/320/286
+f 255/297/265 269/319/285 270/305/273
+f 262/296/264 278/321/287 263/298/266
+f 274/312/280 290/322/288 275/316/282
+f 267/314/281 283/323/289 268/317/283
+f 275/316/282 291/324/290 276/318/284
+f 268/317/283 284/325/291 269/319/285
+f 277/320/286 291/324/290 292/326/292
+f 269/319/285 285/327/293 270/305/273
+f 277/320/286 293/328/294 278/321/287
+f 271/306/274 285/327/293 286/329/295
+f 279/307/275 293/328/294 294/330/296
+f 271/306/274 287/331/297 272/308/276
+f 279/307/275 295/332/298 280/309/277
+f 273/310/278 287/331/297 288/333/299
+f 281/311/279 295/332/298 296/334/300
+f 273/310/278 289/335/301 274/312/280
+f 267/314/281 297/336/30 282/337/302
+f 206/338/32 281/311/279 296/334/300
+f 293/328/294 310/339/303 294/330/296
+f 286/329/295 303/340/304 287/331/297
+f 294/330/296 311/341/305 295/332/298
+f 288/333/299 303/340/304 304/342/306
+f 295/332/298 312/343/307 296/334/300
+f 289/335/301 304/342/306 305/344/308
+f 282/337/302 297/345/30 298/346/309
+f 206/347/32 296/334/300 312/343/307
+f 289/335/301 306/348/310 290/322/288
+f 282/337/302 299/349/311 283/323/289
+f 290/322/288 307/350/312 291/324/290
+f 283/323/289 300/351/313 284/325/291
+f 292/326/292 307/350/312 308/352/314
+f 285/327/293 300/351/313 301/353/315
+f 292/326/292 309/354/316 293/328/294
+f 286/329/295 301/353/315 302/355/317
+f 306/348/310 322/356/318 307/350/312
+f 299/349/311 315/357/319 300/351/313
+f 308/352/314 322/356/318 323/358/320
+f 301/353/315 315/357/319 316/359/321
+f 308/352/314 324/360/322 309/354/316
+f 302/355/317 316/359/321 317/361/323
+f 309/354/316 325/362/324 310/339/303
+f 302/355/317 318/363/325 303/340/304
+f 311/341/305 325/362/324 326/364/326
+f 304/342/306 318/363/325 319/365/327
+f 311/341/305 327/366/328 312/343/307
+f 304/342/306 320/367/329 305/344/308
+f 298/346/309 297/368/30 313/369/330
+f 206/370/32 312/343/307 327/366/328
+f 305/344/308 321/371/331 306/348/310
+f 298/346/309 314/372/332 299/349/311
+f 326/364/326 340/373/333 341/374/334
+f 319/365/327 333/375/335 334/376/336
+f 327/366/328 341/374/334 342/377/337
+f 319/365/327 335/378/338 320/367/329
+f 313/369/330 297/379/30 328/380/339
+f 206/381/32 327/366/328 342/377/337
+f 320/367/329 336/382/340 321/371/331
+f 313/369/330 329/383/341 314/372/332
+f 321/371/331 337/384/342 322/356/318
+f 314/372/332 330/385/343 315/357/319
+f 323/358/320 337/384/342 338/386/344
+f 316/359/321 330/385/343 331/387/345
+f 324/360/322 338/386/344 339/388/346
+f 317/361/323 331/387/345 332/389/347
+f 324/360/322 340/373/333 325/362/324
+f 317/361/323 333/375/335 318/363/325
+f 329/383/341 345/390/348 330/385/343
+f 338/386/344 352/391/349 353/392/350
+f 331/387/345 345/390/348 346/393/351
+f 338/386/344 354/394/352 339/388/346
+f 332/389/347 346/393/351 347/395/353
+f 339/388/346 355/396/354 340/373/333
+f 332/389/347 348/397/355 333/375/335
+f 341/374/334 355/396/354 356/398/356
+f 334/376/336 348/397/355 349/399/357
+f 341/374/334 357/400/358 342/377/337
+f 334/376/336 350/401/359 335/378/338
+f 328/380/339 297/402/30 343/403/360
+f 206/404/32 342/377/337 357/400/358
+f 335/378/338 351/405/361 336/382/340
+f 329/383/341 343/403/360 344/406/362
+f 336/382/340 352/391/349 337/384/342
+f 349/399/357 363/407/363 364/408/364
+f 356/398/356 372/409/365 357/400/358
+f 349/399/357 365/410/366 350/401/359
+f 343/403/360 297/411/30 358/412/367
+f 206/413/32 357/400/358 372/409/365
+f 351/405/361 365/410/366 366/414/368
+f 344/406/362 358/412/367 359/415/369
+f 351/405/361 367/416/370 352/391/349
+f 344/406/362 360/417/371 345/390/348
+f 353/392/350 367/416/370 368/418/372
+f 346/393/351 360/417/371 361/419/373
+f 353/392/350 369/420/374 354/394/352
+f 346/393/351 362/421/375 347/395/353
+f 355/396/354 369/420/374 370/422/376
+f 347/395/353 363/407/363 348/397/355
+f 356/398/356 370/422/376 371/423/377
+f 368/424/372 382/425/378 383/426/379
+f 361/427/373 375/428/380 376/429/381
+f 368/424/372 384/430/382 369/431/374
+f 362/432/375 376/429/381 377/433/383
+f 369/431/374 385/434/384 370/435/376
+f 362/432/375 378/436/385 363/437/363
+f 371/438/377 385/434/384 386/439/386
+f 364/440/364 378/436/385 379/441/387
+f 371/438/377 387/442/388 372/443/365
+f 364/440/364 380/444/389 365/445/366
+f 358/446/367 297/447/30 373/448/390
+f 206/449/32 372/443/365 387/442/388
+f 366/450/368 380/444/389 381/451/391
+f 359/452/369 373/448/390 374/453/392
+f 366/450/368 382/425/378 367/454/370
+f 359/452/369 375/428/380 360/455/371
+f 386/439/386 402/456/393 387/442/388
+f 379/441/387 395/457/394 380/444/389
+f 373/448/390 297/458/30 388/459/395
+f 206/460/32 387/442/388 402/456/393
+f 380/444/389 396/461/396 381/451/391
+f 373/448/390 389/462/397 374/453/392
+f 381/451/391 397/463/398 382/425/378
+f 374/453/392 390/464/399 375/428/380
+f 383/426/379 397/463/398 398/465/400
+f 376/429/381 390/464/399 391/466/401
+f 383/426/379 399/467/402 384/430/382
+f 376/429/381 392/468/403 377/433/383
+f 384/430/382 400/469/404 385/434/384
+f 377/433/383 393/470/405 378/436/385
+f 386/439/386 400/469/404 401/471/406
+f 379/441/387 393/470/405 394/472/407
+f 391/466/401 405/473/408 406/474/409
+f 398/465/400 414/475/410 399/467/402
+f 392/468/403 406/474/409 407/476/411
+f 399/467/402 415/477/412 400/469/404
+f 392/468/403 408/478/413 393/470/405
+f 401/471/406 415/477/412 416/479/414
+f 394/472/407 408/478/413 409/480/415
+f 401/471/406 417/481/416 402/456/393
+f 394/472/407 410/482/417 395/457/394
+f 388/459/395 297/483/30 403/484/418
+f 206/485/32 402/456/393 417/481/416
+f 396/461/396 410/482/417 411/486/419
+f 388/459/395 404/487/420 389/462/397
+f 396/461/396 412/488/421 397/463/398
+f 390/464/399 404/487/420 405/473/408
+f 398/465/400 412/488/421 413/489/422
+f 409/480/415 425/490/423 410/482/417
+f 403/484/418 297/491/30 418/492/424
+f 206/493/32 417/481/416 432/494/425
+f 411/486/419 425/490/423 426/495/426
+f 403/484/418 419/496/427 404/487/420
+f 411/486/419 427/497/428 412/488/421
+f 404/487/420 420/498/429 405/473/408
+f 413/489/422 427/497/428 428/499/430
+f 405/473/408 421/500/431 406/474/409
+f 413/489/422 429/501/432 414/475/410
+f 407/476/411 421/500/431 422/502/433
+f 414/475/410 430/503/434 415/477/412
+f 407/476/411 423/504/435 408/478/413
+f 415/477/412 431/505/436 416/479/414
+f 409/480/415 423/504/435 424/506/437
+f 416/479/414 432/494/425 417/481/416
+f 428/499/430 444/507/438 429/501/432
+f 422/502/433 436/508/439 437/509/440
+f 430/503/434 444/507/438 445/510/441
+f 422/502/433 438/511/442 423/504/435
+f 430/503/434 446/512/443 431/505/436
+f 424/506/437 438/511/442 439/513/444
+f 431/505/436 447/514/445 432/494/425
+f 425/490/423 439/513/444 440/515/446
+f 418/492/424 297/516/30 433/517/447
+f 206/518/32 432/494/425 447/514/445
+f 425/490/423 441/519/448 426/495/426
+f 418/492/424 434/520/449 419/496/427
+f 426/495/426 442/521/450 427/497/428
+f 419/496/427 435/522/451 420/498/429
+f 428/499/430 442/521/450 443/523/452
+f 420/498/429 436/508/439 421/500/431
+f 206/524/32 447/514/445 462/525/453
+f 440/515/446 456/526/454 441/519/448
+f 434/520/449 448/527/455 449/528/456
+f 441/519/448 457/529/457 442/521/450
+f 435/522/451 449/528/456 450/530/458
+f 443/523/452 457/529/457 458/531/459
+f 436/508/439 450/530/458 451/532/460
+f 443/523/452 459/533/461 444/507/438
+f 437/509/440 451/532/460 452/534/462
+f 444/507/438 460/535/463 445/510/441
+f 437/509/440 453/536/464 438/511/442
+f 445/510/441 461/537/465 446/512/443
+f 439/513/444 453/536/464 454/538/466
+f 446/512/443 462/525/453 447/514/445
+f 439/513/444 455/539/467 440/515/446
+f 433/517/447 297/540/30 448/527/455
+f 459/533/461 475/541/468 460/535/463
+f 452/534/462 468/542/469 453/536/464
+f 460/535/463 476/543/470 461/537/465
+f 454/538/466 468/542/469 469/544/471
+f 462/525/453 476/543/470 477/545/472
+f 454/538/466 470/546/473 455/539/467
+f 448/527/455 297/547/30 463/548/474
+f 206/549/32 462/525/453 477/545/472
+f 455/539/467 471/550/475 456/526/454
+f 448/527/455 464/551/476 449/528/456
+f 456/526/454 472/552/477 457/529/457
+f 449/528/456 465/553/478 450/530/458
+f 458/531/459 472/552/477 473/554/479
+f 450/530/458 466/555/480 451/532/460
+f 458/531/459 474/556/481 459/533/461
+f 452/534/462 466/555/480 467/557/482
+f 464/551/476 1/4/4 2/6/6
+f 471/550/475 478/8/8 472/552/477
+f 465/553/478 2/6/6 3/9/9
+f 473/554/479 478/8/8 479/12/12
+f 466/555/480 3/9/9 4/14/14
+f 473/554/479 480/16/16 474/556/481
+f 467/557/482 4/14/14 5/18/18
+f 474/556/481 10/20/20 475/541/468
+f 468/542/469 5/18/18 6/22/22
+f 475/541/468 481/24/24 476/543/470
+f 469/544/471 6/22/22 7/26/26
+f 476/543/470 482/28/28 477/545/472
+f 470/546/473 7/26/26 8/1/1
+f 463/548/474 297/558/30 1/4/4
+f 206/559/32 477/545/472 482/28/28
+f 470/546/473 9/3/3 471/550/475
+f 8/1/1 18/29/29 19/2/2
+f 1/4/4 11/31/31 12/5/5
+f 9/3/3 19/2/2 20/7/7
+f 3/9/9 2/6/6 12/5/5
+f 478/8/8 20/7/7 21/11/11
+f 3/9/9 13/10/10 14/13/13
+f 479/12/12 21/11/11 22/15/15
+f 4/14/14 14/13/13 15/17/17
+f 480/16/16 22/15/15 23/19/19
+f 5/18/18 15/17/17 16/21/21
+f 10/20/20 23/19/19 24/23/23
+f 6/22/22 16/21/21 17/25/25
+f 481/24/24 24/23/23 25/27/27
+f 7/26/26 17/25/25 18/29/29
+f 24/23/23 39/48/46 40/33/33
+f 17/25/25 32/49/47 33/34/34
+f 19/2/2 18/29/29 33/34/34
+f 11/31/31 26/36/35 27/39/37
+f 20/7/7 19/2/2 34/38/36
+f 12/5/5 27/39/37 28/41/39
+f 20/7/7 35/40/38 36/42/40
+f 13/10/10 28/41/39 29/43/41
+f 22/15/15 21/11/11 36/42/40
+f 14/13/13 29/43/41 30/45/43
+f 22/15/15 37/44/42 38/46/44
+f 15/17/17 30/45/43 31/47/45
+f 23/19/19 38/46/44 39/48/46
+f 16/21/21 31/47/45 32/49/47
+f 37/44/42 36/42/40 51/50/48
+f 29/43/41 44/66/62 45/52/50
+f 37/44/42 52/51/49 53/53/51
+f 30/45/43 45/52/50 46/54/52
+f 38/46/44 53/53/51 54/55/53
+f 32/49/47 31/47/45 46/54/52
+f 39/48/46 54/55/53 55/57/55
+f 32/49/47 47/56/54 48/58/56
+f 33/34/34 48/58/56 49/62/58
+f 26/36/35 41/60/57 42/63/59
+f 34/38/36 49/62/58 50/64/60
+f 27/39/37 42/63/59 43/65/61
+f 36/42/40 35/40/38 50/64/60
+f 28/41/39 43/65/61 44/66/62
+f 48/58/56 63/83/77 64/71/65
+f 41/60/57 56/68/63 57/72/66
+f 49/62/58 64/71/65 65/73/67
+f 42/63/59 57/72/66 58/74/68
+f 51/50/48 50/64/60 65/73/67
+f 43/65/61 58/74/68 59/76/70
+f 51/50/48 66/75/69 67/77/71
+f 44/66/62 59/76/70 60/78/72
+f 52/51/49 67/77/71 68/79/73
+f 45/52/50 60/78/72 61/80/74
+f 53/53/51 68/79/73 69/81/75
+f 46/54/52 61/80/74 62/82/76
+f 54/55/53 69/81/75 70/70/64
+f 48/58/56 47/56/54 62/82/76
+f 60/78/72 59/76/70 74/84/78
+f 68/79/73 67/77/71 82/86/80
+f 60/78/72 75/85/79 76/88/82
+f 69/81/75 68/79/73 83/87/81
+f 61/80/74 76/88/82 77/90/84
+f 69/81/75 84/89/83 85/91/85
+f 63/83/77 62/82/76 77/90/84
+f 63/83/77 78/92/86 79/96/88
+f 56/68/63 71/94/87 72/97/89
+f 64/71/65 79/96/88 80/98/90
+f 57/72/66 72/97/89 73/99/91
+f 66/75/69 65/73/67 80/98/90
+f 58/74/68 73/99/91 74/84/78
+f 66/75/69 81/100/92 82/86/80
+f 78/92/86 93/114/106 94/101/93
+f 71/94/87 86/116/107 87/102/94
+f 79/96/88 94/101/93 95/103/95
+f 72/97/89 87/102/94 88/104/96
+f 81/100/92 80/98/90 95/103/95
+f 73/99/91 88/104/96 89/106/98
+f 82/86/80 81/100/92 96/105/97
+f 75/85/79 74/84/78 89/106/98
+f 82/86/80 97/107/99 98/109/101
+f 75/85/79 90/108/100 91/110/102
+f 84/89/83 83/87/81 98/109/101
+f 77/90/84 76/88/82 91/110/102
+f 84/89/83 99/111/103 100/113/105
+f 77/90/84 92/112/104 93/114/106
+f 97/107/99 112/133/121 113/118/108
+f 90/108/100 105/134/122 106/119/109
+f 98/109/101 113/118/108 114/120/110
+f 92/112/104 91/110/102 106/119/109
+f 100/113/105 99/111/103 114/120/110
+f 92/112/104 107/121/111 108/123/113
+f 93/114/106 108/123/113 109/127/115
+f 86/116/107 101/125/114 102/128/116
+f 94/101/93 109/127/115 110/129/117
+f 87/102/94 102/128/116 103/130/118
+f 96/105/97 95/103/95 110/129/117
+f 89/106/98 88/104/96 103/130/118
+f 97/107/99 96/105/97 111/131/119
+f 89/106/98 104/132/120 105/134/122
+f 101/125/114 116/149/136 117/135/123
+f 109/127/115 124/151/137 125/136/124
+f 102/128/116 117/135/123 118/137/125
+f 111/131/119 110/129/117 125/136/124
+f 103/130/118 118/137/125 119/139/127
+f 111/131/119 126/138/126 127/140/128
+f 104/132/120 119/139/127 120/141/129
+f 113/118/108 112/133/121 127/140/128
+f 105/134/122 120/141/129 121/143/131
+f 114/120/110 113/118/108 128/142/130
+f 107/121/111 106/119/109 121/143/131
+f 115/122/112 114/120/110 129/144/132
+f 107/121/111 122/145/133 123/147/135
+f 109/127/115 108/123/113 123/147/135
+f 120/141/129 135/167/151 136/152/138
+f 128/142/130 143/168/152 144/153/139
+f 122/145/133 121/143/131 136/152/138
+f 130/146/134 129/144/132 144/153/139
+f 122/145/133 137/154/140 138/156/142
+f 123/147/135 138/156/142 139/160/144
+f 117/135/123 116/149/136 131/158/143
+f 124/151/137 139/160/144 140/162/146
+f 117/135/123 132/161/145 133/163/147
+f 126/138/126 125/136/124 140/162/146
+f 118/137/125 133/163/147 134/165/149
+f 126/138/126 141/164/148 142/166/150
+f 120/141/129 119/139/127 134/165/149
+f 128/142/130 127/140/128 142/166/150
+f 139/160/144 154/185/167 155/169/153
+f 133/163/147 132/161/145 147/170/154
+f 141/164/148 140/162/146 155/169/153
+f 133/163/147 148/171/155 149/173/157
+f 141/164/148 156/172/156 157/174/158
+f 134/165/149 149/173/157 150/175/159
+f 142/166/150 157/174/158 158/176/160
+f 135/167/151 150/175/159 151/177/161
+f 144/153/139 143/168/152 158/176/160
+f 137/154/140 136/152/138 151/177/161
+f 144/153/139 159/178/162 160/180/164
+f 137/154/140 152/179/163 153/181/165
+f 138/156/142 153/181/165 154/185/167
+f 131/158/143 146/183/166 147/170/154
+f 158/176/160 173/202/182 174/186/168
+f 152/179/163 151/177/161 166/187/169
+f 159/178/162 174/186/168 175/189/171
+f 152/179/163 167/188/170 168/190/172
+f 154/185/167 153/181/165 168/190/172
+f 146/183/166 161/192/173 162/195/175
+f 154/185/167 169/194/174 170/196/176
+f 147/170/154 162/195/175 163/197/177
+f 156/172/156 155/169/153 170/196/176
+f 148/171/155 163/197/177 164/199/179
+f 156/172/156 171/198/178 172/200/180
+f 150/175/159 149/173/157 164/199/179
+f 158/176/160 157/174/158 172/200/180
+f 150/175/159 165/201/181 166/187/169
+f 170/196/176 185/218/196 186/203/183
+f 163/197/177 178/219/197 179/204/184
+f 171/198/178 186/203/183 187/205/185
+f 164/199/179 179/204/184 180/206/186
+f 173/202/182 172/200/180 187/205/185
+f 165/201/181 180/206/186 181/208/188
+f 173/202/182 188/207/187 189/209/189
+f 167/188/170 166/187/169 181/208/188
+f 175/189/171 174/186/168 189/209/189
+f 167/188/170 182/210/190 183/212/192
+f 168/190/172 183/212/192 184/216/194
+f 161/192/173 176/214/193 177/217/195
+f 169/194/174 184/216/194 185/218/196
+f 162/195/175 177/217/195 178/219/197
+f 190/211/191 189/209/189 204/220/198
+f 182/210/190 197/236/212 198/222/200
+f 184/216/194 183/212/192 198/222/200
+f 176/214/193 191/224/201 192/227/203
+f 184/216/194 199/226/202 200/228/204
+f 177/217/195 192/227/203 193/229/205
+f 186/203/183 185/218/196 200/228/204
+f 179/204/184 178/219/197 193/229/205
+f 186/203/183 201/230/206 202/232/208
+f 180/206/186 179/204/184 194/231/207
+f 188/207/187 187/205/185 202/232/208
+f 180/206/186 195/233/209 196/235/211
+f 188/207/187 203/234/210 204/220/198
+f 182/210/190 181/208/188 196/235/211
+f 193/229/205 209/252/226 210/237/213
+f 201/230/206 217/253/227 218/238/214
+f 194/231/207 210/237/213 211/239/215
+f 203/234/210 202/232/208 218/238/214
+f 195/233/209 211/239/215 212/241/217
+f 203/234/210 219/240/216 220/242/218
+f 197/236/212 196/235/211 212/241/217
+f 204/220/198 220/242/218 221/244/220
+f 197/236/212 213/243/219 214/245/221
+f 198/222/200 214/245/221 215/249/223
+f 191/224/201 207/247/222 208/250/224
+f 199/226/202 215/249/223 216/251/225
+f 193/229/205 192/227/203 208/250/224
+f 201/230/206 200/228/204 216/251/225
+f 213/243/219 228/270/242 229/254/228
+f 214/245/221 229/254/228 230/259/231
+f 207/247/222 222/256/229 223/260/232
+f 215/249/223 230/259/231 231/261/233
+f 208/250/224 223/260/232 224/262/234
+f 217/253/227 216/251/225 231/261/233
+f 209/252/226 224/262/234 225/264/236
+f 217/253/227 232/263/235 233/265/237
+f 210/237/213 225/264/236 226/266/238
+f 218/238/214 233/265/237 234/267/239
+f 211/239/215 226/266/238 227/268/240
+f 219/240/216 234/267/239 235/269/241
+f 213/243/219 212/241/217 227/268/240
+f 221/244/220 220/242/218 235/269/241
+f 232/263/235 247/286/256 248/271/243
+f 225/264/236 240/287/257 241/272/244
+f 234/267/239 233/265/237 248/271/243
+f 226/266/238 241/272/244 242/274/246
+f 234/267/239 249/273/245 250/275/247
+f 228/270/242 227/268/240 242/274/246
+f 236/258/230 235/269/241 250/275/247
+f 228/270/242 243/276/248 244/278/250
+f 229/254/228 244/278/250 245/282/252
+f 222/256/229 237/280/251 238/283/253
+f 230/259/231 245/282/252 246/284/254
+f 224/262/234 223/260/232 238/283/253
+f 232/263/235 231/261/233 246/284/254
+f 225/264/236 224/262/234 239/285/255
+f 244/278/250 259/304/272 260/292/260
+f 237/280/251 252/289/258 253/293/261
+f 245/282/252 260/292/260 261/294/262
+f 238/283/253 253/293/261 254/295/263
+f 247/286/256 246/284/254 261/294/262
+f 240/287/257 239/285/255 254/295/263
+f 247/286/256 262/296/264 263/298/266
+f 241/272/244 240/287/257 255/297/265
+f 248/271/243 263/298/266 264/300/268
+f 241/272/244 256/299/267 257/301/269
+f 249/273/245 264/300/268 265/302/270
+f 243/276/248 242/274/246 257/301/269
+f 250/275/247 265/302/270 266/291/259
+f 243/276/248 258/303/271 259/304/272
+f 256/299/267 255/297/265 270/305/273
+f 263/298/266 278/321/287 279/307/275
+f 256/299/267 271/306/274 272/308/276
+f 265/302/270 264/300/268 279/307/275
+f 258/303/271 257/301/269 272/308/276
+f 266/291/259 265/302/270 280/309/277
+f 258/303/271 273/310/278 274/312/280
+f 260/292/260 259/304/272 274/312/280
+f 252/289/258 267/314/281 268/317/283
+f 260/292/260 275/316/282 276/318/284
+f 253/293/261 268/317/283 269/319/285
+f 262/296/264 261/294/262 276/318/284
+f 255/297/265 254/295/263 269/319/285
+f 262/296/264 277/320/286 278/321/287
+f 274/312/280 289/335/301 290/322/288
+f 267/314/281 282/337/302 283/323/289
+f 275/316/282 290/322/288 291/324/290
+f 268/317/283 283/323/289 284/325/291
+f 277/320/286 276/318/284 291/324/290
+f 269/319/285 284/325/291 285/327/293
+f 277/320/286 292/326/292 293/328/294
+f 271/306/274 270/305/273 285/327/293
+f 279/307/275 278/321/287 293/328/294
+f 271/306/274 286/329/295 287/331/297
+f 279/307/275 294/330/296 295/332/298
+f 273/310/278 272/308/276 287/331/297
+f 281/311/279 280/309/277 295/332/298
+f 273/310/278 288/333/299 289/335/301
+f 293/328/294 309/354/316 310/339/303
+f 286/329/295 302/355/317 303/340/304
+f 294/330/296 310/339/303 311/341/305
+f 288/333/299 287/331/297 303/340/304
+f 295/332/298 311/341/305 312/343/307
+f 289/335/301 288/333/299 304/342/306
+f 289/335/301 305/344/308 306/348/310
+f 282/337/302 298/346/309 299/349/311
+f 290/322/288 306/348/310 307/350/312
+f 283/323/289 299/349/311 300/351/313
+f 292/326/292 291/324/290 307/350/312
+f 285/327/293 284/325/291 300/351/313
+f 292/326/292 308/352/314 309/354/316
+f 286/329/295 285/327/293 301/353/315
+f 306/348/310 321/371/331 322/356/318
+f 299/349/311 314/372/332 315/357/319
+f 308/352/314 307/350/312 322/356/318
+f 301/353/315 300/351/313 315/357/319
+f 308/352/314 323/358/320 324/360/322
+f 302/355/317 301/353/315 316/359/321
+f 309/354/316 324/360/322 325/362/324
+f 302/355/317 317/361/323 318/363/325
+f 311/341/305 310/339/303 325/362/324
+f 304/342/306 303/340/304 318/363/325
+f 311/341/305 326/364/326 327/366/328
+f 304/342/306 319/365/327 320/367/329
+f 305/344/308 320/367/329 321/371/331
+f 298/346/309 313/369/330 314/372/332
+f 326/364/326 325/362/324 340/373/333
+f 319/365/327 318/363/325 333/375/335
+f 327/366/328 326/364/326 341/374/334
+f 319/365/327 334/376/336 335/378/338
+f 320/367/329 335/378/338 336/382/340
+f 313/369/330 328/380/339 329/383/341
+f 321/371/331 336/382/340 337/384/342
+f 314/372/332 329/383/341 330/385/343
+f 323/358/320 322/356/318 337/384/342
+f 316/359/321 315/357/319 330/385/343
+f 324/360/322 323/358/320 338/386/344
+f 317/361/323 316/359/321 331/387/345
+f 324/360/322 339/388/346 340/373/333
+f 317/361/323 332/389/347 333/375/335
+f 329/383/341 344/406/362 345/390/348
+f 338/386/344 337/384/342 352/391/349
+f 331/387/345 330/385/343 345/390/348
+f 338/386/344 353/392/350 354/394/352
+f 332/389/347 331/387/345 346/393/351
+f 339/388/346 354/394/352 355/396/354
+f 332/389/347 347/395/353 348/397/355
+f 341/374/334 340/373/333 355/396/354
+f 334/376/336 333/375/335 348/397/355
+f 341/374/334 356/398/356 357/400/358
+f 334/376/336 349/399/357 350/401/359
+f 335/378/338 350/401/359 351/405/361
+f 329/383/341 328/380/339 343/403/360
+f 336/382/340 351/405/361 352/391/349
+f 349/399/357 348/397/355 363/407/363
+f 356/398/356 371/423/377 372/409/365
+f 349/399/357 364/408/364 365/410/366
+f 351/405/361 350/401/359 365/410/366
+f 344/406/362 343/403/360 358/412/367
+f 351/405/361 366/414/368 367/416/370
+f 344/406/362 359/415/369 360/417/371
+f 353/392/350 352/391/349 367/416/370
+f 346/393/351 345/390/348 360/417/371
+f 353/392/350 368/418/372 369/420/374
+f 346/393/351 361/419/373 362/421/375
+f 355/396/354 354/394/352 369/420/374
+f 347/395/353 362/421/375 363/407/363
+f 356/398/356 355/396/354 370/422/376
+f 368/424/372 367/454/370 382/425/378
+f 361/427/373 360/455/371 375/428/380
+f 368/424/372 383/426/379 384/430/382
+f 362/432/375 361/427/373 376/429/381
+f 369/431/374 384/430/382 385/434/384
+f 362/432/375 377/433/383 378/436/385
+f 371/438/377 370/435/376 385/434/384
+f 364/440/364 363/437/363 378/436/385
+f 371/438/377 386/439/386 387/442/388
+f 364/440/364 379/441/387 380/444/389
+f 366/450/368 365/445/366 380/444/389
+f 359/452/369 358/446/367 373/448/390
+f 366/450/368 381/451/391 382/425/378
+f 359/452/369 374/453/392 375/428/380
+f 386/439/386 401/471/406 402/456/393
+f 379/441/387 394/472/407 395/457/394
+f 380/444/389 395/457/394 396/461/396
+f 373/448/390 388/459/395 389/462/397
+f 381/451/391 396/461/396 397/463/398
+f 374/453/392 389/462/397 390/464/399
+f 383/426/379 382/425/378 397/463/398
+f 376/429/381 375/428/380 390/464/399
+f 383/426/379 398/465/400 399/467/402
+f 376/429/381 391/466/401 392/468/403
+f 384/430/382 399/467/402 400/469/404
+f 377/433/383 392/468/403 393/470/405
+f 386/439/386 385/434/384 400/469/404
+f 379/441/387 378/436/385 393/470/405
+f 391/466/401 390/464/399 405/473/408
+f 398/465/400 413/489/422 414/475/410
+f 392/468/403 391/466/401 406/474/409
+f 399/467/402 414/475/410 415/477/412
+f 392/468/403 407/476/411 408/478/413
+f 401/471/406 400/469/404 415/477/412
+f 394/472/407 393/470/405 408/478/413
+f 401/471/406 416/479/414 417/481/416
+f 394/472/407 409/480/415 410/482/417
+f 396/461/396 395/457/394 410/482/417
+f 388/459/395 403/484/418 404/487/420
+f 396/461/396 411/486/419 412/488/421
+f 390/464/399 389/462/397 404/487/420
+f 398/465/400 397/463/398 412/488/421
+f 409/480/415 424/506/437 425/490/423
+f 411/486/419 410/482/417 425/490/423
+f 403/484/418 418/492/424 419/496/427
+f 411/486/419 426/495/426 427/497/428
+f 404/487/420 419/496/427 420/498/429
+f 413/489/422 412/488/421 427/497/428
+f 405/473/408 420/498/429 421/500/431
+f 413/489/422 428/499/430 429/501/432
+f 407/476/411 406/474/409 421/500/431
+f 414/475/410 429/501/432 430/503/434
+f 407/476/411 422/502/433 423/504/435
+f 415/477/412 430/503/434 431/505/436
+f 409/480/415 408/478/413 423/504/435
+f 416/479/414 431/505/436 432/494/425
+f 428/499/430 443/523/452 444/507/438
+f 422/502/433 421/500/431 436/508/439
+f 430/503/434 429/501/432 444/507/438
+f 422/502/433 437/509/440 438/511/442
+f 430/503/434 445/510/441 446/512/443
+f 424/506/437 423/504/435 438/511/442
+f 431/505/436 446/512/443 447/514/445
+f 425/490/423 424/506/437 439/513/444
+f 425/490/423 440/515/446 441/519/448
+f 418/492/424 433/517/447 434/520/449
+f 426/495/426 441/519/448 442/521/450
+f 419/496/427 434/520/449 435/522/451
+f 428/499/430 427/497/428 442/521/450
+f 420/498/429 435/522/451 436/508/439
+f 440/515/446 455/539/467 456/526/454
+f 434/520/449 433/517/447 448/527/455
+f 441/519/448 456/526/454 457/529/457
+f 435/522/451 434/520/449 449/528/456
+f 443/523/452 442/521/450 457/529/457
+f 436/508/439 435/522/451 450/530/458
+f 443/523/452 458/531/459 459/533/461
+f 437/509/440 436/508/439 451/532/460
+f 444/507/438 459/533/461 460/535/463
+f 437/509/440 452/534/462 453/536/464
+f 445/510/441 460/535/463 461/537/465
+f 439/513/444 438/511/442 453/536/464
+f 446/512/443 461/537/465 462/525/453
+f 439/513/444 454/538/466 455/539/467
+f 459/533/461 474/556/481 475/541/468
+f 452/534/462 467/557/482 468/542/469
+f 460/535/463 475/541/468 476/543/470
+f 454/538/466 453/536/464 468/542/469
+f 462/525/453 461/537/465 476/543/470
+f 454/538/466 469/544/471 470/546/473
+f 455/539/467 470/546/473 471/550/475
+f 448/527/455 463/548/474 464/551/476
+f 456/526/454 471/550/475 472/552/477
+f 449/528/456 464/551/476 465/553/478
+f 458/531/459 457/529/457 472/552/477
+f 450/530/458 465/553/478 466/555/480
+f 458/531/459 473/554/479 474/556/481
+f 452/534/462 451/532/460 466/555/480
+f 464/551/476 463/548/474 1/4/4
+f 471/550/475 9/3/3 478/8/8
+f 465/553/478 464/551/476 2/6/6
+f 473/554/479 472/552/477 478/8/8
+f 466/555/480 465/553/478 3/9/9
+f 473/554/479 479/12/12 480/16/16
+f 467/557/482 466/555/480 4/14/14
+f 474/556/481 480/16/16 10/20/20
+f 468/542/469 467/557/482 5/18/18
+f 475/541/468 10/20/20 481/24/24
+f 469/544/471 468/542/469 6/22/22
+f 476/543/470 481/24/24 482/28/28
+f 470/546/473 469/544/471 7/26/26
+f 470/546/473 8/1/1 9/3/3
diff --git a/aswebglue/examples/NormalModel/obj_norm.ts b/aswebglue/examples/NormalModel/obj_norm.ts
new file mode 100644
index 0000000..2ce28a8
--- /dev/null
+++ b/aswebglue/examples/NormalModel/obj_norm.ts
@@ -0,0 +1,206 @@
+/**
+ * @author Rick Battagline / https://embed.com/wasm
+ */
+
+import {
+ WebGLRenderingContext,
+ WebGLShader,
+ WebGLProgram,
+ ImageData,
+ WebGLBuffer,
+ GLint,
+ WebGLUniformLocation,
+ WebGLTexture,
+} from '../../WebGL';
+
+import {objArray, groupArray, VertGroup, matMapArray} from './Moon_Sphere';
+
+// OG CODE
+const VERTEX_SHADER_CODE: string = `#version 300 es
+precision highp float;
+
+in vec3 position;
+in vec3 normal;
+in vec2 tex_uv;
+
+out vec3 cam_dir;
+out vec3 light_dir;
+out vec2 tc;
+out vec3 norm;
+
+void main() {
+ // rotate z axis
+
+ mat4 mRotateTranslate = mat4(
+ 1.0, 0.0, 0.0, 0.0, // column 1
+ 0.0, cos(-0.2),-sin(-0.2), -0.2, // column 2
+ 0.0, sin(-0.0), cos(-0.2), 0.0, // column 3
+ 0.0, 0.0, 0.0, 1.0 // column 4
+ );
+
+ vec3 up = vec3(0.0, -1.0, 0.0);
+ vec3 light_pos = vec3( 0.0, -0.7, 0.5 );
+ float d = dot( up, normal );
+
+ vec3 tan = cross( up, normal );
+ vec3 bitan = cross( normal, tan );
+
+ vec3 l;
+ l.x = dot( tan, light_pos );
+ l.y = dot( bitan, light_pos );
+ l.z = dot( normal, light_pos );
+
+ light_dir = l; //normalize(l);
+
+ vec3 camera;
+ camera.x = dot( tan, position );
+ camera.y = dot( bitan, position );
+ camera.z = dot( normal, position );
+
+ cam_dir = normalize(camera);
+ tc = tex_uv;
+ norm = normal;
+
+ gl_Position = vec4(position, 1.0);
+}`;
+
+// this shader is super kludgy
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+precision highp float;
+uniform sampler2D normalMap;
+uniform sampler2D sampler;
+
+in vec3 cam_dir;
+in vec3 light_dir;
+in vec2 tc;
+in vec3 norm;
+
+out vec4 color;
+void main (void)
+{
+ vec3 l = normalize(light_dir);
+ vec3 e = normalize(-cam_dir);
+ vec3 n = 2.0 * texture(normalMap, tc).rgb - 1.0;
+
+ float kd = clamp(dot(l, n + norm - vec3(0.0, 0.0, 1.0)), 0.1, 1.0);
+
+ vec3 tex_color = texture(sampler, tc).rgb;
+ vec3 c = kd * tex_color;
+
+ color = vec4( c, 1.0 );
+}`;
+
+// initialize webgl
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let tex_uv_al: GLint = gl.getAttribLocation(program, 'tex_uv');
+gl.enableVertexAttribArray(tex_uv_al);
+
+let normal_al: GLint = gl.getAttribLocation(program, 'normal');
+gl.enableVertexAttribArray(normal_al);
+
+let texture: WebGLTexture = gl.createTexture();
+let sampler: WebGLUniformLocation = gl.getUniformLocation(program, 'sampler');
+
+let texture_n: WebGLTexture = gl.createTexture();
+let tex_norm: WebGLUniformLocation = gl.getUniformLocation(program, 'normalMap');
+
+var image_id: ImageData = gl.createImage(matMapArray[0].diffuse);
+var norm_image_id: ImageData = gl.createImage(matMapArray[0].bump);
+
+var image_ready: bool = false;
+
+//diffuse
+gl.enable(gl.DEPTH_TEST);
+
+function rotate(theta: f32): void {
+ for (var obj_i: i32 = 0; obj_i < objArray.length; obj_i++) {
+ for (var coord_i: i32 = 0; coord_i < objArray[obj_i].length; coord_i += 8) {
+ let x: f32 = objArray[obj_i][coord_i];
+ let z: f32 = objArray[obj_i][coord_i + 2];
+
+ let nx: f32 = objArray[obj_i][coord_i + 5];
+ let nz: f32 = objArray[obj_i][coord_i + 7];
+
+ let x1: f32 = x * Mathf.cos(theta) + z * Mathf.sin(theta);
+ let z1: f32 = z * Mathf.cos(theta) - x * Mathf.sin(theta);
+
+ let nx1: f32 = nx * Mathf.cos(theta) + nz * Mathf.sin(theta);
+ let nz1: f32 = nz * Mathf.cos(theta) - nx * Mathf.sin(theta);
+
+ objArray[obj_i][coord_i] = x1;
+ objArray[obj_i][coord_i + 2] = z1;
+
+ objArray[obj_i][coord_i + 5] = nx1;
+ objArray[obj_i][coord_i + 7] = nz1;
+ }
+ }
+
+ return;
+}
+
+var vGroup: VertGroup;
+export function displayLoop(delta: i32): void {
+ let r: f32 = delta / 10000.0;
+ rotate(r);
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+ if (image_ready == false) {
+ if (gl.imageReady(image_id) == false || gl.imageReady(norm_image_id) == false) {
+ return;
+ }
+
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +true);
+ gl.activeTexture(gl.TEXTURE0);
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ 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, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image_id);
+
+ gl.activeTexture(gl.TEXTURE1);
+ gl.bindTexture(gl.TEXTURE_2D, texture_n);
+ 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, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, norm_image_id);
+
+ gl.uniform1i(sampler, 0);
+ image_ready = true;
+ }
+
+ for (var g_i: i32 = 0; g_i < groupArray.length; g_i++) {
+ vGroup = groupArray[g_i];
+ gl.bufferData(gl.ARRAY_BUFFER, objArray[vGroup.obj_index], gl.DYNAMIC_DRAW);
+
+ // dimensions | data_type | normalize | stride | offset
+ gl.vertexAttribPointer(position_al, 3, gl.FLOAT, +false, 32, 0);
+ gl.vertexAttribPointer(tex_uv_al, 2, gl.FLOAT, +false, 32, 12);
+ gl.vertexAttribPointer(normal_al, 3, gl.FLOAT, +false, 32, 20);
+ gl.drawArrays(gl.TRIANGLES, vGroup.start_face, vGroup.length);
+ }
+}
diff --git a/aswebglue/examples/NormalModel/reminder.txt b/aswebglue/examples/NormalModel/reminder.txt
new file mode 100644
index 0000000..c5f8dfd
--- /dev/null
+++ b/aswebglue/examples/NormalModel/reminder.txt
@@ -0,0 +1 @@
+When you're exporting from Blender, don't forget to triangulate faces.
\ No newline at end of file
diff --git a/aswebglue/examples/Obj/README.md b/aswebglue/examples/Obj/README.md
new file mode 100644
index 0000000..2cf9b9c
--- /dev/null
+++ b/aswebglue/examples/Obj/README.md
@@ -0,0 +1,8 @@
+# Using Wavefront .obj files
+
+This program has a second .ts file that includes the model data for the Blender3D demo monkey (named Suzanne). This model data was created using the npm module I created called [obj2asc](https://www.npmjs.com/package/obj2asc).
+
+The obj2asc CLI converts a Wavefront .obj file to an AssemblyScript .asc file. If you use it, and you are using the .ts extension for AssemblyScript, you will need to change the .asc file extension to .ts, or copy and paste the data into an existing .ts file. You can install obj2asc using npm:
+```
+npm i obj2asc -g
+```
\ No newline at end of file
diff --git a/aswebglue/examples/Obj/Suzanne.ts b/aswebglue/examples/Obj/Suzanne.ts
new file mode 100644
index 0000000..bdddd37
--- /dev/null
+++ b/aswebglue/examples/Obj/Suzanne.ts
@@ -0,0 +1,2907 @@
+export var Suzanne_data: StaticArray = [
+//X, Y, Z, NX, NY, NZ
+0.1875, 0.096875, 0.303125, 0.6617, -0.2026, 0.7219,
+0.2, 0.0375, 0.275, 0.6617, -0.2026, 0.7219,
+0.225, 0.096875, 0.26875, 0.6617, -0.2026, 0.7219,
+-0.2, 0.0375, 0.275, -0.6617, -0.2026, 0.7219,
+-0.1875, 0.096875, 0.303125, -0.6617, -0.2026, 0.7219,
+-0.225, 0.096875, 0.26875, -0.6617, -0.2026, 0.7219,
+0.225, 0.096875, 0.26875, 0.8268, -0.3051, 0.4725,
+0.21875, 0.021875, 0.23125, 0.8268, -0.3051, 0.4725,
+0.25, 0.096875, 0.225, 0.8268, -0.3051, 0.4725,
+-0.21875, 0.021875, 0.23125, -0.8268, -0.3051, 0.4725,
+-0.225, 0.096875, 0.26875, -0.8268, -0.3051, 0.4725,
+-0.25, 0.096875, 0.225, -0.8268, -0.3051, 0.4725,
+0.2, 0.0375, 0.275, 0.4076, -0.7905, 0.457,
+0.140625, -0.009375, 0.246875, 0.4076, -0.7905, 0.457,
+0.21875, 0.021875, 0.23125, 0.4076, -0.7905, 0.457,
+-0.140625, -0.009375, 0.246875, -0.4076, -0.7905, 0.457,
+-0.2, 0.0375, 0.275, -0.4076, -0.7905, 0.457,
+-0.21875, 0.021875, 0.23125, -0.4076, -0.7905, 0.457,
+0.175, 0.065625, 0.30625, 0.3791, -0.5163, 0.7679,
+0.140625, 0.0125, 0.2875, 0.3791, -0.5163, 0.7679,
+0.2, 0.0375, 0.275, 0.3791, -0.5163, 0.7679,
+-0.140625, 0.0125, 0.2875, -0.3791, -0.5163, 0.7679,
+-0.175, 0.065625, 0.30625, -0.3791, -0.5163, 0.7679,
+-0.2, 0.0375, 0.275, -0.3791, -0.5163, 0.7679,
+0.140625, 0.053125, 0.3125, -0.0859, -0.5222, 0.8485,
+0.08125, 0.0375, 0.296875, -0.0859, -0.5222, 0.8485,
+0.140625, 0.0125, 0.2875, -0.0859, -0.5222, 0.8485,
+-0.08125, 0.0375, 0.296875, 0.0859, -0.5222, 0.8485,
+-0.140625, 0.053125, 0.3125, 0.0859, -0.5222, 0.8485,
+-0.140625, 0.0125, 0.2875, 0.0859, -0.5222, 0.8485,
+0.140625, 0.0125, 0.2875, -0.2664, -0.8487, 0.457,
+0.0625, 0.021875, 0.259375, -0.2664, -0.8487, 0.457,
+0.140625, -0.009375, 0.246875, -0.2664, -0.8487, 0.457,
+-0.0625, 0.021875, 0.259375, 0.2664, -0.8487, 0.457,
+-0.140625, 0.0125, 0.2875, 0.2664, -0.8487, 0.457,
+-0.140625, -0.009375, 0.246875, 0.2664, -0.8487, 0.457,
+0.05625, 0.096875, 0.296875, -0.7824, -0.3294, 0.5285,
+0.0625, 0.021875, 0.259375, -0.7824, -0.3294, 0.5285,
+0.08125, 0.0375, 0.296875, -0.7824, -0.3294, 0.5285,
+-0.05625, 0.096875, 0.296875, 0.7606, -0.34, 0.5531,
+-0.0625, 0.021875, 0.259375, 0.7606, -0.34, 0.5531,
+-0.03125, 0.096875, 0.2625, 0.7606, -0.34, 0.5531,
+0.109375, 0.065625, 0.31875, -0.4706, -0.1981, 0.8598,
+0.05625, 0.096875, 0.296875, -0.4706, -0.1981, 0.8598,
+0.08125, 0.0375, 0.296875, -0.4706, -0.1981, 0.8598,
+-0.05625, 0.096875, 0.296875, 0.4706, -0.1981, 0.8598,
+-0.109375, 0.065625, 0.31875, 0.4706, -0.1981, 0.8598,
+-0.08125, 0.0375, 0.296875, 0.4706, -0.1981, 0.8598,
+0.096875, 0.096875, 0.31875, -0.4649, 0.1958, 0.8634,
+0.08125, 0.15625, 0.296875, -0.4649, 0.1958, 0.8634,
+0.05625, 0.096875, 0.296875, -0.4649, 0.1958, 0.8634,
+-0.08125, 0.15625, 0.296875, 0.4649, 0.1958, 0.8634,
+-0.096875, 0.096875, 0.31875, 0.4649, 0.1958, 0.8634,
+-0.05625, 0.096875, 0.296875, 0.4649, 0.1958, 0.8634,
+0.08125, 0.15625, 0.296875, -0.7656, 0.3223, 0.5568,
+0.03125, 0.096875, 0.2625, -0.7656, 0.3223, 0.5568,
+0.05625, 0.096875, 0.296875, -0.7656, 0.3223, 0.5568,
+-0.08125, 0.15625, 0.296875, 0.7683, 0.3293, 0.5488,
+-0.03125, 0.096875, 0.2625, 0.7683, 0.3293, 0.5488,
+-0.0625, 0.175, 0.259375, 0.7683, 0.3293, 0.5488,
+0.140625, 0.18125, 0.2875, -0.256, 0.8073, 0.5317,
+0.0625, 0.175, 0.259375, -0.256, 0.8073, 0.5317,
+0.08125, 0.15625, 0.296875, -0.256, 0.8073, 0.5317,
+-0.140625, 0.18125, 0.2875, 0.2487, 0.8249, 0.5076,
+-0.0625, 0.175, 0.259375, 0.2487, 0.8249, 0.5076,
+-0.140625, 0.20625, 0.246875, 0.2487, 0.8249, 0.5076,
+0.140625, 0.14375, 0.3125, -0.0821, 0.6023, 0.794,
+0.08125, 0.15625, 0.296875, -0.0821, 0.6023, 0.794,
+0.109375, 0.13125, 0.31875, -0.0821, 0.6023, 0.794,
+-0.140625, 0.14375, 0.3125, 0.1017, 0.5518, 0.8277,
+-0.08125, 0.15625, 0.296875, 0.1017, 0.5518, 0.8277,
+-0.140625, 0.18125, 0.2875, 0.1017, 0.5518, 0.8277,
+0.175, 0.13125, 0.30625, 0.3329, 0.5231, 0.7846,
+0.140625, 0.18125, 0.2875, 0.3329, 0.5231, 0.7846,
+0.140625, 0.14375, 0.3125, 0.3329, 0.5231, 0.7846,
+-0.175, 0.13125, 0.30625, -0.3861, 0.5446, 0.7445,
+-0.140625, 0.18125, 0.2875, -0.3861, 0.5446, 0.7445,
+-0.2, 0.15625, 0.275, -0.3861, 0.5446, 0.7445,
+0.2, 0.15625, 0.275, 0.4246, 0.7711, 0.4745,
+0.140625, 0.20625, 0.246875, 0.4246, 0.7711, 0.4745,
+0.140625, 0.18125, 0.2875, 0.4246, 0.7711, 0.4745,
+-0.2, 0.15625, 0.275, -0.4059, 0.7641, 0.5014,
+-0.140625, 0.20625, 0.246875, -0.4059, 0.7641, 0.5014,
+-0.21875, 0.175, 0.23125, -0.4059, 0.7641, 0.5014,
+0.225, 0.096875, 0.26875, 0.8251, 0.2968, 0.4808,
+0.21875, 0.175, 0.23125, 0.8251, 0.2968, 0.4808,
+0.2, 0.15625, 0.275, 0.8251, 0.2968, 0.4808,
+-0.225, 0.096875, 0.26875, -0.8299, 0.294, 0.4742,
+-0.21875, 0.175, 0.23125, -0.8299, 0.294, 0.4742,
+-0.25, 0.096875, 0.225, -0.8299, 0.294, 0.4742,
+0.1875, 0.096875, 0.303125, 0.6888, 0.1868, 0.7005,
+0.2, 0.15625, 0.275, 0.6888, 0.1868, 0.7005,
+0.175, 0.13125, 0.30625, 0.6888, 0.1868, 0.7005,
+-0.1875, 0.096875, 0.303125, -0.6617, 0.2026, 0.7219,
+-0.2, 0.15625, 0.275, -0.6617, 0.2026, 0.7219,
+-0.225, 0.096875, 0.26875, -0.6617, 0.2026, 0.7219,
+0.175, 0.13125, 0.30625, 0.84, 0.3436, -0.42,
+0.190625, 0.096875, 0.309375, 0.84, 0.3436, -0.42,
+0.1875, 0.096875, 0.303125, 0.84, 0.3436, -0.42,
+-0.175, 0.13125, 0.30625, -0.7816, 0.3058, -0.5437,
+-0.190625, 0.096875, 0.309375, -0.7816, 0.3058, -0.5437,
+-0.178125, 0.134375, 0.3125, -0.7816, 0.3058, -0.5437,
+0.140625, 0.14375, 0.3125, 0.2074, 0.8296, -0.5185,
+0.178125, 0.134375, 0.3125, 0.2074, 0.8296, -0.5185,
+0.175, 0.13125, 0.30625, 0.2074, 0.8296, -0.5185,
+-0.140625, 0.14375, 0.3125, -0.2037, 0.8146, -0.5431,
+-0.178125, 0.134375, 0.3125, -0.2037, 0.8146, -0.5431,
+-0.140625, 0.15, 0.321875, -0.2037, 0.8146, -0.5431,
+0.109375, 0.13125, 0.31875, -0.4056, 0.7605, -0.507,
+0.140625, 0.15, 0.321875, -0.4056, 0.7605, -0.507,
+0.140625, 0.14375, 0.3125, -0.4056, 0.7605, -0.507,
+-0.109375, 0.13125, 0.31875, 0.4381, 0.7988, -0.4123,
+-0.140625, 0.15, 0.321875, 0.4381, 0.7988, -0.4123,
+-0.10625, 0.134375, 0.328125, 0.4381, 0.7988, -0.4123,
+0.096875, 0.096875, 0.31875, -0.8642, 0.3143, -0.3928,
+0.10625, 0.134375, 0.328125, -0.8642, 0.3143, -0.3928,
+0.109375, 0.13125, 0.31875, -0.8642, 0.3143, -0.3928,
+-0.096875, 0.096875, 0.31875, 0.7861, 0.3276, -0.5241,
+-0.10625, 0.134375, 0.328125, 0.7861, 0.3276, -0.5241,
+-0.090625, 0.096875, 0.328125, 0.7861, 0.3276, -0.5241,
+0.096875, 0.096875, 0.31875, -0.7783, -0.3537, -0.5188,
+0.10625, 0.0625, 0.328125, -0.7783, -0.3537, -0.5188,
+0.090625, 0.096875, 0.328125, -0.7783, -0.3537, -0.5188,
+-0.10625, 0.0625, 0.328125, 0.7783, -0.3537, -0.5188,
+-0.096875, 0.096875, 0.31875, 0.7783, -0.3537, -0.5188,
+-0.090625, 0.096875, 0.328125, 0.7783, -0.3537, -0.5188,
+0.109375, 0.065625, 0.31875, -0.4381, -0.7988, -0.4123,
+0.140625, 0.046875, 0.321875, -0.4381, -0.7988, -0.4123,
+0.10625, 0.0625, 0.328125, -0.4381, -0.7988, -0.4123,
+-0.140625, 0.046875, 0.321875, 0.4381, -0.7988, -0.4123,
+-0.109375, 0.065625, 0.31875, 0.4381, -0.7988, -0.4123,
+-0.10625, 0.0625, 0.328125, 0.4381, -0.7988, -0.4123,
+0.140625, 0.053125, 0.3125, 0.2037, -0.8146, -0.5431,
+0.178125, 0.0625, 0.3125, 0.2037, -0.8146, -0.5431,
+0.140625, 0.046875, 0.321875, 0.2037, -0.8146, -0.5431,
+-0.178125, 0.0625, 0.3125, -0.2037, -0.8146, -0.5431,
+-0.140625, 0.053125, 0.3125, -0.2037, -0.8146, -0.5431,
+-0.140625, 0.046875, 0.321875, -0.2037, -0.8146, -0.5431,
+0.175, 0.065625, 0.30625, 0.7683, -0.3293, -0.5488,
+0.190625, 0.096875, 0.309375, 0.7683, -0.3293, -0.5488,
+0.178125, 0.0625, 0.3125, 0.7683, -0.3293, -0.5488,
+-0.190625, 0.096875, 0.309375, -0.7683, -0.3293, -0.5488,
+-0.175, 0.065625, 0.30625, -0.7683, -0.3293, -0.5488,
+-0.178125, 0.0625, 0.3125, -0.7683, -0.3293, -0.5488,
+0.140625, 0.096875, 0.33125, 0.4, -0.0623, 0.9144,
+0.178125, 0.0625, 0.3125, 0.4, -0.0623, 0.9144,
+0.190625, 0.096875, 0.309375, 0.4, -0.0623, 0.9144,
+-0.190625, 0.096875, 0.309375, -0.4, -0.0623, 0.9144,
+-0.178125, 0.0625, 0.3125, -0.4, -0.0623, 0.9144,
+-0.140625, 0.096875, 0.33125, -0.4, -0.0623, 0.9144,
+0.140625, 0.046875, 0.321875, 0.3069, -0.1754, 0.9354,
+0.178125, 0.0625, 0.3125, 0.3069, -0.1754, 0.9354,
+0.140625, 0.096875, 0.33125, 0.3069, -0.1754, 0.9354,
+-0.140625, 0.096875, 0.33125, -0.3069, -0.1754, 0.9354,
+-0.178125, 0.0625, 0.3125, -0.3069, -0.1754, 0.9354,
+-0.140625, 0.046875, 0.321875, -0.3069, -0.1754, 0.9354,
+0.140625, 0.096875, 0.33125, 0.0945, -0.1835, 0.9785,
+0.10625, 0.0625, 0.328125, 0.0945, -0.1835, 0.9785,
+0.140625, 0.046875, 0.321875, 0.0945, -0.1835, 0.9785,
+-0.140625, 0.046875, 0.321875, -0.0945, -0.1835, 0.9785,
+-0.10625, 0.0625, 0.328125, -0.0945, -0.1835, 0.9785,
+-0.140625, 0.096875, 0.33125, -0.0945, -0.1835, 0.9785,
+0.140625, 0.096875, 0.33125, -0.0624, -0.0283, 0.9977,
+0.090625, 0.096875, 0.328125, -0.0624, -0.0283, 0.9977,
+0.10625, 0.0625, 0.328125, -0.0624, -0.0283, 0.9977,
+-0.10625, 0.0625, 0.328125, 0.0624, -0.0283, 0.9977,
+-0.090625, 0.096875, 0.328125, 0.0624, -0.0283, 0.9977,
+-0.140625, 0.096875, 0.33125, 0.0624, -0.0283, 0.9977,
+0.140625, 0.096875, 0.33125, -0.0624, 0.026, 0.9977,
+0.10625, 0.134375, 0.328125, -0.0624, 0.026, 0.9977,
+0.090625, 0.096875, 0.328125, -0.0624, 0.026, 0.9977,
+-0.090625, 0.096875, 0.328125, 0.0624, 0.026, 0.9977,
+-0.10625, 0.134375, 0.328125, 0.0624, 0.026, 0.9977,
+-0.140625, 0.096875, 0.33125, 0.0624, 0.026, 0.9977,
+0.140625, 0.096875, 0.33125, 0.0996, 0.1729, 0.9799,
+0.140625, 0.15, 0.321875, 0.0996, 0.1729, 0.9799,
+0.10625, 0.134375, 0.328125, 0.0996, 0.1729, 0.9799,
+-0.10625, 0.134375, 0.328125, -0.0996, 0.1729, 0.9799,
+-0.140625, 0.15, 0.321875, -0.0996, 0.1729, 0.9799,
+-0.140625, 0.096875, 0.33125, -0.0996, 0.1729, 0.9799,
+0.140625, 0.096875, 0.33125, 0.3036, 0.1656, 0.9383,
+0.178125, 0.134375, 0.3125, 0.3036, 0.1656, 0.9383,
+0.140625, 0.15, 0.321875, 0.3036, 0.1656, 0.9383,
+-0.140625, 0.15, 0.321875, -0.3036, 0.1656, 0.9383,
+-0.178125, 0.134375, 0.3125, -0.3036, 0.1656, 0.9383,
+-0.140625, 0.096875, 0.33125, -0.3036, 0.1656, 0.9383,
+0.140625, 0.096875, 0.33125, 0.4002, 0.0572, 0.9147,
+0.190625, 0.096875, 0.309375, 0.4002, 0.0572, 0.9147,
+0.178125, 0.134375, 0.3125, 0.4002, 0.0572, 0.9147,
+-0.178125, 0.134375, 0.3125, -0.4002, 0.0572, 0.9147,
+-0.190625, 0.096875, 0.309375, -0.4002, 0.0572, 0.9147,
+-0.140625, 0.096875, 0.33125, -0.4002, 0.0572, 0.9147,
+0.065625, -0.371875, 0.253125, 0.1367, -0.8748, 0.4648,
+ 0, -0.39375, 0.23125, 0.1367, -0.8748, 0.4648,
+0.071875, -0.3875, 0.221875, 0.1367, -0.8748, 0.4648,
+-0.065625, -0.371875, 0.253125, -0.1054, -0.8433, 0.527,
+ 0, -0.39375, 0.23125, -0.1054, -0.8433, 0.527,
+ 0, -0.378125, 0.25625, -0.1054, -0.8433, 0.527,
+0.09375, -0.365625, 0.253125, 0.2303, -0.8656, 0.4447,
+0.071875, -0.3875, 0.221875, 0.2303, -0.8656, 0.4447,
+0.13125, -0.378125, 0.209375, 0.2303, -0.8656, 0.4447,
+-0.09375, -0.365625, 0.253125, -0.1916, -0.862, 0.4693,
+-0.071875, -0.3875, 0.221875, -0.1916, -0.862, 0.4693,
+-0.065625, -0.371875, 0.253125, -0.1916, -0.862, 0.4693,
+0.146875, -0.35625, 0.2125, 0.5788, -0.5049, 0.6404,
+0.09375, -0.365625, 0.253125, 0.5788, -0.5049, 0.6404,
+0.13125, -0.378125, 0.209375, 0.5788, -0.5049, 0.6404,
+-0.09375, -0.365625, 0.253125, -0.5788, -0.5049, 0.6404,
+-0.146875, -0.35625, 0.2125, -0.5788, -0.5049, 0.6404,
+-0.13125, -0.378125, 0.209375, -0.5788, -0.5049, 0.6404,
+0.140625, -0.278125, 0.228125, 0.7763, -0.0633, 0.6272,
+0.10625, -0.328125, 0.265625, 0.7763, -0.0633, 0.6272,
+0.146875, -0.35625, 0.2125, 0.7763, -0.0633, 0.6272,
+-0.10625, -0.328125, 0.265625, -0.7763, -0.0633, 0.6272,
+-0.140625, -0.278125, 0.228125, -0.7763, -0.0633, 0.6272,
+-0.146875, -0.35625, 0.2125, -0.7763, -0.0633, 0.6272,
+0.125, -0.175, 0.228125, 0.7471, 0.1132, 0.655,
+0.1, -0.28125, 0.275, 0.7471, 0.1132, 0.655,
+0.140625, -0.278125, 0.228125, 0.7471, 0.1132, 0.655,
+-0.1, -0.28125, 0.275, -0.7471, 0.1132, 0.655,
+-0.125, -0.175, 0.228125, -0.7471, 0.1132, 0.655,
+-0.140625, -0.278125, 0.228125, -0.7471, 0.1132, 0.655,
+0.08125, -0.075, 0.225, 0.3747, -0.8345, 0.404,
+0.159375, -0.01875, 0.26875, 0.3747, -0.8345, 0.404,
+0.05, -0.040625, 0.325, 0.3747, -0.8345, 0.404,
+-0.159375, -0.01875, 0.26875, -0.3747, -0.8345, 0.404,
+-0.08125, -0.075, 0.225, -0.3747, -0.8345, 0.404,
+-0.05, -0.040625, 0.325, -0.3747, -0.8345, 0.404,
+0.253125, -0.015625, 0.215625, 0.3557, -0.729, 0.5848,
+0.159375, -0.01875, 0.26875, 0.3557, -0.729, 0.5848,
+0.175, -0.05625, 0.2125, 0.3557, -0.729, 0.5848,
+-0.253125, -0.015625, 0.215625, -0.4177, -0.5751, 0.7034,
+-0.159375, -0.01875, 0.26875, -0.4177, -0.5751, 0.7034,
+-0.246875, 0.021875, 0.25, -0.4177, -0.5751, 0.7034,
+0.253125, -0.015625, 0.215625, 0.6947, -0.4197, 0.5841,
+0.290625, 0.08125, 0.240625, 0.6947, -0.4197, 0.5841,
+0.246875, 0.021875, 0.25, 0.6947, -0.4197, 0.5841,
+-0.290625, 0.08125, 0.240625, -0.6947, -0.4197, 0.5841,
+-0.253125, -0.015625, 0.215625, -0.6947, -0.4197, 0.5841,
+-0.246875, 0.021875, 0.25, -0.6947, -0.4197, 0.5841,
+0.34375, 0.171875, 0.2375, 0.7028, -0.3915, 0.5939,
+0.290625, 0.08125, 0.240625, 0.7028, -0.3915, 0.5939,
+0.33125, 0.059375, 0.178125, 0.7028, -0.3915, 0.5939,
+-0.34375, 0.171875, 0.2375, -0.5537, -0.2978, 0.7777,
+-0.290625, 0.08125, 0.240625, -0.5537, -0.2978, 0.7777,
+-0.296875, 0.15, 0.2625, -0.5537, -0.2978, 0.7777,
+0.284375, 0.19375, 0.25, 0.3127, 0.3425, 0.886,
+0.296875, 0.15, 0.2625, 0.3127, 0.3425, 0.886,
+0.34375, 0.171875, 0.2375, 0.3127, 0.3425, 0.886,
+-0.284375, 0.19375, 0.25, -0.8227, 0.3606, 0.4395,
+-0.296875, 0.15, 0.2625, -0.8227, 0.3606, 0.4395,
+-0.275, 0.165625, 0.290625, -0.8227, 0.3606, 0.4395,
+0.196875, 0.240625, 0.275, 0.5091, 0.6482, 0.5663,
+0.275, 0.165625, 0.290625, 0.5091, 0.6482, 0.5663,
+0.284375, 0.19375, 0.25, 0.5091, 0.6482, 0.5663,
+-0.196875, 0.240625, 0.275, -0.5041, 0.6448, 0.5745,
+-0.275, 0.165625, 0.290625, -0.5041, 0.6448, 0.5745,
+-0.175, 0.21875, 0.31875, -0.5041, 0.6448, 0.5745,
+0.196875, 0.240625, 0.275, 0.5977, 0.5565, 0.5771,
+0.125, 0.25625, 0.334375, 0.5977, 0.5565, 0.5771,
+0.175, 0.21875, 0.31875, 0.5977, 0.5565, 0.5771,
+-0.125, 0.25625, 0.334375, -0.5977, 0.5565, 0.5771,
+-0.196875, 0.240625, 0.275, -0.5977, 0.5565, 0.5771,
+-0.175, 0.21875, 0.31875, -0.5977, 0.5565, 0.5771,
+0.0625, 0.2875, 0.303125, -0.0486, 0.656, 0.7532,
+0.125, 0.25625, 0.334375, -0.0486, 0.656, 0.7532,
+0.128125, 0.303125, 0.29375, -0.0486, 0.656, 0.7532,
+-0.0625, 0.2875, 0.303125, 0.0371, 0.6685, 0.7428,
+-0.125, 0.25625, 0.334375, 0.0371, 0.6685, 0.7428,
+-0.08125, 0.246875, 0.340625, 0.0371, 0.6685, 0.7428,
+0.025, 0.196875, 0.3, -0.7104, 0.2715, 0.6494,
+0.08125, 0.246875, 0.340625, -0.7104, 0.2715, 0.6494,
+0.0625, 0.2875, 0.303125, -0.7104, 0.2715, 0.6494,
+-0.025, 0.196875, 0.3, 0.7386, 0.3768, 0.559,
+-0.08125, 0.246875, 0.340625, 0.7386, 0.3768, 0.559,
+-0.040625, 0.171875, 0.3375, 0.7386, 0.3768, 0.559,
+ 0, 0.171875, 0.296875, -0.6013, 0.5262, 0.6013,
+0.040625, 0.171875, 0.3375, -0.6013, 0.5262, 0.6013,
+0.025, 0.196875, 0.3, -0.6013, 0.5262, 0.6013,
+ 0, 0.171875, 0.296875, 0.5774, 0.5774, 0.5774,
+-0.040625, 0.171875, 0.3375, 0.5774, 0.5774, 0.5774,
+ 0, 0.140625, 0.328125, 0.5774, 0.5774, 0.5774,
+0.1, 0.1875, 0.303125, 0.507, -0.6281, 0.5903,
+0.040625, 0.171875, 0.3375, 0.507, -0.6281, 0.5903,
+0.065625, 0.165625, 0.309375, 0.507, -0.6281, 0.5903,
+-0.1, 0.1875, 0.303125, -0.5364, -0.323, 0.7797,
+-0.040625, 0.171875, 0.3375, -0.5364, -0.323, 0.7797,
+-0.08125, 0.246875, 0.340625, -0.5364, -0.323, 0.7797,
+0.1, 0.1875, 0.303125, 0.2226, -0.4694, 0.8545,
+0.125, 0.25625, 0.334375, 0.2226, -0.4694, 0.8545,
+0.08125, 0.246875, 0.340625, 0.2226, -0.4694, 0.8545,
+-0.125, 0.25625, 0.334375, -0.2226, -0.4694, 0.8545,
+-0.1, 0.1875, 0.303125, -0.2226, -0.4694, 0.8545,
+-0.08125, 0.246875, 0.340625, -0.2226, -0.4694, 0.8545,
+0.175, 0.21875, 0.31875, -0.0348, -0.5792, 0.8144,
+0.13125, 0.190625, 0.296875, -0.0348, -0.5792, 0.8144,
+0.171875, 0.175, 0.2875, -0.0348, -0.5792, 0.8144,
+-0.175, 0.21875, 0.31875, 0.1073, -0.501, 0.8588,
+-0.13125, 0.190625, 0.296875, 0.1073, -0.501, 0.8588,
+-0.125, 0.25625, 0.334375, 0.1073, -0.501, 0.8588,
+0.275, 0.165625, 0.290625, -0.0899, -0.7843, 0.6138,
+0.171875, 0.175, 0.2875, -0.0899, -0.7843, 0.6138,
+0.240625, 0.15, 0.265625, -0.0899, -0.7843, 0.6138,
+-0.275, 0.165625, 0.290625, 0.077, -0.5759, 0.8139,
+-0.171875, 0.175, 0.2875, 0.077, -0.5759, 0.8139,
+-0.175, 0.21875, 0.31875, 0.077, -0.5759, 0.8139,
+0.296875, 0.15, 0.2625, 0.0547, -0.1695, 0.984,
+0.240625, 0.15, 0.265625, 0.0547, -0.1695, 0.984,
+0.25625, 0.11875, 0.259375, 0.0547, -0.1695, 0.984,
+-0.296875, 0.15, 0.2625, -0.0279, -0.8645, 0.5019,
+-0.240625, 0.15, 0.265625, -0.0279, -0.8645, 0.5019,
+-0.275, 0.165625, 0.290625, -0.0279, -0.8645, 0.5019,
+0.290625, 0.08125, 0.240625, 0.426, -0.0609, 0.9027,
+0.25625, 0.11875, 0.259375, 0.426, -0.0609, 0.9027,
+0.25, 0.075, 0.259375, 0.426, -0.0609, 0.9027,
+-0.290625, 0.08125, 0.240625, -0.1687, -0.3128, 0.9347,
+-0.25625, 0.11875, 0.259375, -0.1687, -0.3128, 0.9347,
+-0.296875, 0.15, 0.2625, -0.1687, -0.3128, 0.9347,
+0.246875, 0.021875, 0.25, 0.3352, -0.1828, 0.9243,
+0.25, 0.075, 0.259375, 0.3352, -0.1828, 0.9243,
+0.196875, 0.025, 0.26875, 0.3352, -0.1828, 0.9243,
+-0.246875, 0.021875, 0.25, -0.435, -0.1812, 0.882,
+-0.25, 0.075, 0.259375, -0.435, -0.1812, 0.882,
+-0.290625, 0.08125, 0.240625, -0.435, -0.1812, 0.882,
+0.159375, -0.01875, 0.26875, 0.3579, -0.3068, 0.8819,
+0.196875, 0.025, 0.26875, 0.3579, -0.3068, 0.8819,
+0.15, 0.00625, 0.28125, 0.3579, -0.3068, 0.8819,
+-0.159375, -0.01875, 0.26875, -0.3223, -0.2762, 0.9054,
+-0.196875, 0.025, 0.26875, -0.3223, -0.2762, 0.9054,
+-0.246875, 0.021875, 0.25, -0.3223, -0.2762, 0.9054,
+0.05, -0.040625, 0.325, 0.3069, 0.2113, 0.928,
+0.15, 0.00625, 0.28125, 0.3069, 0.2113, 0.928,
+0.08125, 0.0375, 0.296875, 0.3069, 0.2113, 0.928,
+-0.05, -0.040625, 0.325, -0.4815, -0.2408, 0.8427,
+-0.15, 0.00625, 0.28125, -0.4815, -0.2408, 0.8427,
+-0.159375, -0.01875, 0.26875, -0.4815, -0.2408, 0.8427,
+0.08125, 0.0375, 0.296875, -0.1598, 0.3903, 0.9067,
+ 0, 0.01875, 0.290625, -0.1598, 0.3903, 0.9067,
+0.05, -0.040625, 0.325, -0.1598, 0.3903, 0.9067,
+ 0, 0.01875, 0.290625, 0.1598, 0.3903, 0.9067,
+-0.08125, 0.0375, 0.296875, 0.1598, 0.3903, 0.9067,
+-0.05, -0.040625, 0.325, 0.1598, 0.3903, 0.9067,
+0.040625, 0.171875, 0.3375, 0.6819, -0.2915, 0.6709,
+0.05, 0.121875, 0.30625, 0.6819, -0.2915, 0.6709,
+0.065625, 0.165625, 0.309375, 0.6819, -0.2915, 0.6709,
+-0.040625, 0.171875, 0.3375, -0.1854, -0.4956, 0.8485,
+-0.05, 0.121875, 0.30625, -0.1854, -0.4956, 0.8485,
+ 0, 0.140625, 0.328125, -0.1854, -0.4956, 0.8485,
+0.05, 0.121875, 0.30625, 0.0585, -0.0781, 0.9952,
+ 0, 0.084375, 0.30625, 0.0585, -0.0781, 0.9952,
+0.053125, 0.084375, 0.303125, 0.0585, -0.0781, 0.9952,
+ 0, 0.084375, 0.30625, -0.0585, -0.0781, 0.9952,
+-0.05, 0.121875, 0.30625, -0.0585, -0.0781, 0.9952,
+-0.053125, 0.084375, 0.303125, -0.0585, -0.0781, 0.9952,
+0.065625, 0.05625, 0.3, -0.0066, -0.2316, 0.9728,
+ 0, 0.084375, 0.30625, -0.0066, -0.2316, 0.9728,
+ 0, 0.01875, 0.290625, -0.0066, -0.2316, 0.9728,
+-0.065625, 0.05625, 0.3, -0.0585, -0.0845, 0.9947,
+ 0, 0.084375, 0.30625, -0.0585, -0.0845, 0.9947,
+-0.053125, 0.084375, 0.303125, -0.0585, -0.0845, 0.9947,
+0.025, -0.353125, 0.278125, 0.1008, -0.7103, 0.6966,
+ 0, -0.378125, 0.25625, 0.1008, -0.7103, 0.6966,
+0.065625, -0.371875, 0.253125, 0.1008, -0.7103, 0.6966,
+ 0, -0.378125, 0.25625, -0.1008, -0.7103, 0.6966,
+-0.025, -0.353125, 0.278125, -0.1008, -0.7103, 0.6966,
+-0.065625, -0.371875, 0.253125, -0.1008, -0.7103, 0.6966,
+0.046875, -0.334375, 0.284375, 0.1322, -0.5947, 0.793,
+0.065625, -0.371875, 0.253125, 0.1322, -0.5947, 0.793,
+0.09375, -0.365625, 0.253125, 0.1322, -0.5947, 0.793,
+-0.065625, -0.371875, 0.253125, -0.1322, -0.5947, 0.793,
+-0.046875, -0.334375, 0.284375, -0.1322, -0.5947, 0.793,
+-0.09375, -0.365625, 0.253125, -0.1322, -0.5947, 0.793,
+0.046875, -0.334375, 0.284375, 0.3128, -0.1662, 0.9352,
+0.10625, -0.328125, 0.265625, 0.3128, -0.1662, 0.9352,
+0.04375, -0.2875, 0.29375, 0.3128, -0.1662, 0.9352,
+-0.046875, -0.334375, 0.284375, -0.3143, -0.3928, 0.8642,
+-0.10625, -0.328125, 0.265625, -0.3143, -0.3928, 0.8642,
+-0.09375, -0.365625, 0.253125, -0.3143, -0.3928, 0.8642,
+0.084375, -0.178125, 0.284375, 0.3288, -0.036, 0.9437,
+0.046875, -0.275, 0.29375, 0.3288, -0.036, 0.9437,
+0.1, -0.28125, 0.275, 0.3288, -0.036, 0.9437,
+-0.046875, -0.275, 0.29375, -0.3288, -0.036, 0.9437,
+-0.084375, -0.178125, 0.284375, -0.3288, -0.036, 0.9437,
+-0.1, -0.28125, 0.275, -0.3288, -0.036, 0.9437,
+0.04375, -0.2875, 0.29375, 0.3233, -0.0808, 0.9429,
+0.1, -0.28125, 0.275, 0.3233, -0.0808, 0.9429,
+0.046875, -0.275, 0.29375, 0.3233, -0.0808, 0.9429,
+-0.1, -0.28125, 0.275, -0.3233, -0.0808, 0.9429,
+-0.04375, -0.2875, 0.29375, -0.3233, -0.0808, 0.9429,
+-0.046875, -0.275, 0.29375, -0.3233, -0.0808, 0.9429,
+ 0, -0.13125, 0.296875, -0.0232, 0.0511, 0.9984,
+0.03125, -0.178125, 0.3, -0.0232, 0.0511, 0.9984,
+0.034375, -0.115625, 0.296875, -0.0232, 0.0511, 0.9984,
+ 0, -0.13125, 0.296875, 0, 0.0665, 0.9978,
+-0.03125, -0.178125, 0.3, 0, 0.0665, 0.9978,
+ 0, -0.178125, 0.3, 0, 0.0665, 0.9978,
+0.03125, -0.178125, 0.3, -0.0043, -0.0651, 0.9979,
+ 0, -0.271875, 0.29375, -0.0043, -0.0651, 0.9979,
+0.046875, -0.275, 0.29375, -0.0043, -0.0651, 0.9979,
+-0.03125, -0.178125, 0.3, 0, -0.0665, 0.9978,
+ 0, -0.271875, 0.29375, 0, -0.0665, 0.9978,
+ 0, -0.178125, 0.3, 0, -0.0665, 0.9978,
+0.04375, -0.2875, 0.29375, 0, 0, 1,
+ 0, -0.271875, 0.29375, 0, 0, 1,
+ 0, -0.30625, 0.29375, 0, 0, 1,
+-0.04375, -0.2875, 0.29375, 0, 0, 1,
+ 0, -0.271875, 0.29375, 0, 0, 1,
+-0.046875, -0.275, 0.29375, 0, 0, 1,
+0.05, -0.090625, 0.3, 0.8447, -0.5335, 0.0445,
+0.0375, -0.109375, 0.3125, 0.8447, -0.5335, 0.0445,
+0.034375, -0.115625, 0.296875, 0.8447, -0.5335, 0.0445,
+-0.0375, -0.109375, 0.3125, -0.8447, -0.5335, 0.0445,
+-0.05, -0.090625, 0.3, -0.8447, -0.5335, 0.0445,
+-0.034375, -0.115625, 0.296875, -0.8447, -0.5335, 0.0445,
+0.040625, -0.059375, 0.296875, 0.95, 0.2692, -0.1583,
+0.053125, -0.090625, 0.31875, 0.95, 0.2692, -0.1583,
+0.05, -0.090625, 0.3, 0.95, 0.2692, -0.1583,
+-0.053125, -0.090625, 0.31875, -0.95, 0.2692, -0.1583,
+-0.040625, -0.059375, 0.296875, -0.95, 0.2692, -0.1583,
+-0.05, -0.090625, 0.3, -0.95, 0.2692, -0.1583,
+0.015625, -0.05, 0.3125, 0.0693, 0.9004, -0.4294,
+0.040625, -0.059375, 0.296875, 0.0693, 0.9004, -0.4294,
+ 0, -0.05625, 0.296875, 0.0693, 0.9004, -0.4294,
+-0.015625, -0.05, 0.3125, -0.1018, 0.9165, -0.387,
+-0.040625, -0.059375, 0.296875, -0.1018, 0.9165, -0.387,
+-0.04375, -0.053125, 0.3125, -0.1018, 0.9165, -0.387,
+ 0, -0.075, 0.31875, -1, 0, 0,
+ 0, -0.05625, 0.296875, -1, 0, 0,
+ 0, -0.078125, 0.3, -1, 0, 0,
+ 0, -0.075, 0.31875, 0.6905, 0.5492, 0.4708,
+ 0, -0.05625, 0.296875, 0.6905, 0.5492, 0.4708,
+-0.015625, -0.05, 0.3125, 0.6905, 0.5492, 0.4708,
+0.034375, -0.115625, 0.296875, 0.4071, -0.8956, 0.1791,
+ 0, -0.128125, 0.3125, 0.4071, -0.8956, 0.1791,
+ 0, -0.13125, 0.296875, 0.4071, -0.8956, 0.1791,
+-0.034375, -0.115625, 0.296875, -0.4319, -0.8639, 0.2592,
+ 0, -0.128125, 0.3125, -0.4319, -0.8639, 0.2592,
+-0.0375, -0.109375, 0.3125, -0.4319, -0.8639, 0.2592,
+0.0375, -0.109375, 0.3125, 0.2873, -0.5747, 0.7663,
+ 0, -0.115625, 0.321875, 0.2873, -0.5747, 0.7663,
+ 0, -0.128125, 0.3125, 0.2873, -0.5747, 0.7663,
+-0.0375, -0.109375, 0.3125, -0.2873, -0.5747, 0.7663,
+ 0, -0.115625, 0.321875, -0.2873, -0.5747, 0.7663,
+-0.03125, -0.1, 0.321875, -0.2873, -0.5747, 0.7663,
+ 0, -0.075, 0.31875, -0.6326, 0.5353, 0.5596,
+0.01875, -0.059375, 0.325, -0.6326, 0.5353, 0.5596,
+0.015625, -0.05, 0.3125, -0.6326, 0.5353, 0.5596,
+-0.01875, -0.059375, 0.325, 0.6326, 0.5353, 0.5596,
+ 0, -0.075, 0.31875, 0.6326, 0.5353, 0.5596,
+-0.015625, -0.05, 0.3125, 0.6326, 0.5353, 0.5596,
+0.015625, -0.05, 0.3125, 0.0862, 0.7759, 0.625,
+0.0375, -0.0625, 0.325, 0.0862, 0.7759, 0.625,
+0.04375, -0.053125, 0.3125, 0.0862, 0.7759, 0.625,
+-0.0375, -0.0625, 0.325, -0.0862, 0.7759, 0.625,
+-0.015625, -0.05, 0.3125, -0.0862, 0.7759, 0.625,
+-0.04375, -0.053125, 0.3125, -0.0862, 0.7759, 0.625,
+0.0375, -0.0625, 0.325, 0.7532, 0.287, 0.5918,
+0.053125, -0.090625, 0.31875, 0.7532, 0.287, 0.5918,
+0.04375, -0.053125, 0.3125, 0.7532, 0.287, 0.5918,
+-0.0375, -0.0625, 0.325, -0.7639, 0.2971, 0.5729,
+-0.053125, -0.090625, 0.31875, -0.7639, 0.2971, 0.5729,
+-0.04375, -0.090625, 0.33125, -0.7639, 0.2971, 0.5729,
+0.053125, -0.090625, 0.31875, 0.3416, -0.5409, 0.7686,
+0.03125, -0.1, 0.321875, 0.3416, -0.5409, 0.7686,
+0.0375, -0.109375, 0.3125, 0.3416, -0.5409, 0.7686,
+-0.03125, -0.1, 0.321875, -0.3416, -0.5409, 0.7686,
+-0.053125, -0.090625, 0.31875, -0.3416, -0.5409, 0.7686,
+-0.0375, -0.109375, 0.3125, -0.3416, -0.5409, 0.7686,
+0.04375, -0.090625, 0.33125, 0.0502, 0.2343, 0.9709,
+0.01875, -0.059375, 0.325, 0.0502, 0.2343, 0.9709,
+ 0, -0.08125, 0.33125, 0.0502, 0.2343, 0.9709,
+-0.04375, -0.090625, 0.33125, -0.0375, 0.2247, 0.9737,
+-0.01875, -0.059375, 0.325, -0.0375, 0.2247, 0.9737,
+-0.0375, -0.0625, 0.325, -0.0375, 0.2247, 0.9737,
+ 0, -0.08125, 0.33125, -0.1304, -0.6087, 0.7826,
+0.03125, -0.1, 0.321875, -0.1304, -0.6087, 0.7826,
+0.04375, -0.090625, 0.33125, -0.1304, -0.6087, 0.7826,
+-0.03125, -0.1, 0.321875, 0.1304, -0.6087, 0.7826,
+ 0, -0.08125, 0.33125, 0.1304, -0.6087, 0.7826,
+-0.04375, -0.090625, 0.33125, 0.1304, -0.6087, 0.7826,
+ 0, -0.05625, 0.296875, -0.5059, 0.0716, 0.8596,
+0.05, -0.040625, 0.325, -0.5059, 0.0716, 0.8596,
+ 0, 0.01875, 0.290625, -0.5059, 0.0716, 0.8596,
+-0.05, -0.040625, 0.325, 0.5059, 0.0716, 0.8596,
+ 0, -0.05625, 0.296875, 0.5059, 0.0716, 0.8596,
+ 0, 0.01875, 0.290625, 0.5059, 0.0716, 0.8596,
+0.040625, -0.059375, 0.296875, -0.5774, -0.5773, 0.5773,
+0.065625, -0.096875, 0.284375, -0.5774, -0.5773, 0.5773,
+0.05, -0.040625, 0.325, -0.5774, -0.5773, 0.5773,
+-0.065625, -0.096875, 0.284375, 0.5774, -0.5773, 0.5773,
+-0.040625, -0.059375, 0.296875, 0.5774, -0.5773, 0.5773,
+-0.05, -0.040625, 0.325, 0.5774, -0.5773, 0.5773,
+0.034375, -0.115625, 0.296875, 0.546, -0.431, 0.7184,
+0.065625, -0.096875, 0.284375, 0.546, -0.431, 0.7184,
+0.05, -0.090625, 0.3, 0.546, -0.431, 0.7184,
+-0.034375, -0.115625, 0.296875, -0.3319, 0.0738, 0.9404,
+-0.065625, -0.096875, 0.284375, -0.3319, 0.0738, 0.9404,
+-0.071875, -0.125, 0.284375, -0.3319, 0.0738, 0.9404,
+0.03125, -0.178125, 0.3, 0.3231, 0.0311, 0.9459,
+0.071875, -0.125, 0.284375, 0.3231, 0.0311, 0.9459,
+0.034375, -0.115625, 0.296875, 0.3231, 0.0311, 0.9459,
+-0.03125, -0.178125, 0.3, -0.2815, 0.0662, 0.9573,
+-0.071875, -0.125, 0.284375, -0.2815, 0.0662, 0.9573,
+-0.084375, -0.178125, 0.284375, -0.2815, 0.0662, 0.9573,
+0.103125, -0.125, 0.221875, 0.7357, 0.391, 0.5531,
+0.084375, -0.178125, 0.284375, 0.7357, 0.391, 0.5531,
+0.125, -0.175, 0.228125, 0.7357, 0.391, 0.5531,
+-0.103125, -0.125, 0.221875, -0.8753, 0.2059, 0.4376,
+-0.084375, -0.178125, 0.284375, -0.8753, 0.2059, 0.4376,
+-0.071875, -0.125, 0.284375, -0.8753, 0.2059, 0.4376,
+0.09375, -0.1, 0.221875, 0.848, 0.318, 0.424,
+0.071875, -0.125, 0.284375, 0.848, 0.318, 0.424,
+0.103125, -0.125, 0.221875, 0.848, 0.318, 0.424,
+-0.09375, -0.1, 0.221875, -0.8973, 0.1994, 0.3938,
+-0.071875, -0.125, 0.284375, -0.8973, 0.1994, 0.3938,
+-0.065625, -0.096875, 0.284375, -0.8973, 0.1994, 0.3938,
+0.08125, -0.075, 0.225, 0.8505, 0.3798, 0.3638,
+0.065625, -0.096875, 0.284375, 0.8505, 0.3798, 0.3638,
+0.09375, -0.1, 0.221875, 0.8505, 0.3798, 0.3638,
+-0.065625, -0.096875, 0.284375, -0.8505, 0.3798, 0.3638,
+-0.08125, -0.075, 0.225, -0.8505, 0.3798, 0.3638,
+-0.09375, -0.1, 0.221875, -0.8505, 0.3798, 0.3638,
+ 0, -0.30625, 0.29375, 0.1783, -0.4161, 0.8917,
+0.0375, -0.296875, 0.290625, 0.1783, -0.4161, 0.8917,
+0.04375, -0.2875, 0.29375, 0.1783, -0.4161, 0.8917,
+ 0, -0.30625, 0.29375, -0.2524, -0.8655, 0.4327,
+-0.0375, -0.296875, 0.290625, -0.2524, -0.8655, 0.4327,
+ 0, -0.309375, 0.2875, -0.2524, -0.8655, 0.4327,
+0.046875, -0.334375, 0.284375, -0.1296, -0.1945, 0.9723,
+0.0375, -0.296875, 0.290625, -0.1296, -0.1945, 0.9723,
+0.0375, -0.328125, 0.284375, -0.1296, -0.1945, 0.9723,
+-0.0375, -0.296875, 0.290625, 0.1296, -0.1945, 0.9723,
+-0.046875, -0.334375, 0.284375, 0.1296, -0.1945, 0.9723,
+-0.0375, -0.328125, 0.284375, 0.1296, -0.1945, 0.9723,
+0.025, -0.353125, 0.278125, -0.4472, 0, 0.8944,
+0.0375, -0.328125, 0.284375, -0.4472, 0, 0.8944,
+0.01875, -0.346875, 0.275, -0.4472, 0, 0.8944,
+-0.0375, -0.328125, 0.284375, 0.4472, 0, 0.8944,
+-0.025, -0.353125, 0.278125, 0.4472, 0, 0.8944,
+-0.01875, -0.346875, 0.275, 0.4472, 0, 0.8944,
+ 0, -0.35625, 0.275, 0, 0, 1,
+0.01875, -0.346875, 0.275, 0, 0, 1,
+ 0, -0.35, 0.275, 0, 0, 1,
+-0.01875, -0.346875, 0.275, 0, 0, 1,
+ 0, -0.35625, 0.275, 0, 0, 1,
+ 0, -0.35, 0.275, 0, 0, 1,
+0.01875, -0.346875, 0.275, -0.1582, 0.9494, 0.2713,
+ 0, -0.34375, 0.253125, -0.1582, 0.9494, 0.2713,
+ 0, -0.35, 0.275, -0.1582, 0.9494, 0.2713,
+-0.01875, -0.346875, 0.275, 0.1582, 0.9494, 0.2713,
+ 0, -0.34375, 0.253125, 0.1582, 0.9494, 0.2713,
+-0.01875, -0.340625, 0.253125, 0.1582, 0.9494, 0.2713,
+0.01875, -0.346875, 0.275, -0.6463, 0.7337, 0.2096,
+0.0375, -0.325, 0.25625, -0.6463, 0.7337, 0.2096,
+0.01875, -0.340625, 0.253125, -0.6463, 0.7337, 0.2096,
+-0.0375, -0.325, 0.25625, 0.6463, 0.7337, 0.2096,
+-0.01875, -0.346875, 0.275, 0.6463, 0.7337, 0.2096,
+-0.01875, -0.340625, 0.253125, 0.6463, 0.7337, 0.2096,
+0.0375, -0.328125, 0.284375, -1, 0, 0,
+0.0375, -0.3, 0.265625, -1, 0, 0,
+0.0375, -0.325, 0.25625, -1, 0, 0,
+-0.0375, -0.3, 0.265625, 1, 0, 0,
+-0.0375, -0.328125, 0.284375, 1, 0, 0,
+-0.0375, -0.325, 0.25625, 1, 0, 0,
+ 0, -0.309375, 0.2875, 0.3051, -0.945, 0.1181,
+0.0375, -0.3, 0.265625, 0.3051, -0.945, 0.1181,
+0.0375, -0.296875, 0.290625, 0.3051, -0.945, 0.1181,
+ 0, -0.309375, 0.2875, -0.3051, -0.945, 0.1181,
+-0.0375, -0.3, 0.265625, -0.3051, -0.945, 0.1181,
+ 0, -0.3125, 0.2625, -0.3051, -0.945, 0.1181,
+ 0, -0.3125, 0.2625, 0.0217, -0.3031, 0.9527,
+0.01875, -0.340625, 0.253125, 0.0217, -0.3031, 0.9527,
+0.0375, -0.3, 0.265625, 0.0217, -0.3031, 0.9527,
+-0.01875, -0.340625, 0.253125, -0.0217, -0.3031, 0.9527,
+ 0, -0.3125, 0.2625, -0.0217, -0.3031, 0.9527,
+-0.0375, -0.3, 0.265625, -0.0217, -0.3031, 0.9527,
+0.0375, -0.3, 0.265625, 0.1353, -0.3479, 0.9277,
+0.01875, -0.340625, 0.253125, 0.1353, -0.3479, 0.9277,
+0.0375, -0.325, 0.25625, 0.1353, -0.3479, 0.9277,
+-0.0375, -0.325, 0.25625, -0.1353, -0.3479, 0.9277,
+-0.01875, -0.340625, 0.253125, -0.1353, -0.3479, 0.9277,
+-0.0375, -0.3, 0.265625, -0.1353, -0.3479, 0.9277,
+0.053125, 0.084375, 0.303125, -0.4681, -0.2239, 0.8548,
+0.075, 0.0625, 0.309375, -0.4681, -0.2239, 0.8548,
+0.06875, 0.0875, 0.3125, -0.4681, -0.2239, 0.8548,
+-0.075, 0.0625, 0.309375, 0.4681, -0.2239, 0.8548,
+-0.053125, 0.084375, 0.303125, 0.4681, -0.2239, 0.8548,
+-0.06875, 0.0875, 0.3125, 0.4681, -0.2239, 0.8548,
+0.05, 0.121875, 0.30625, -0.271, 0.0271, 0.9622,
+0.06875, 0.0875, 0.3125, -0.271, 0.0271, 0.9622,
+0.071875, 0.11875, 0.3125, -0.271, 0.0271, 0.9622,
+-0.06875, 0.0875, 0.3125, 0.271, 0.0271, 0.9622,
+-0.05, 0.121875, 0.30625, 0.271, 0.0271, 0.9622,
+-0.071875, 0.11875, 0.3125, 0.271, 0.0271, 0.9622,
+0.05, 0.121875, 0.30625, -0.1717, -0.009, 0.9851,
+0.084375, 0.15, 0.3125, -0.1717, -0.009, 0.9851,
+0.065625, 0.165625, 0.309375, -0.1717, -0.009, 0.9851,
+-0.05, 0.121875, 0.30625, 0.2595, 0.1038, 0.9601,
+-0.084375, 0.15, 0.3125, 0.2595, 0.1038, 0.9601,
+-0.071875, 0.11875, 0.3125, 0.2595, 0.1038, 0.9601,
+0.08125, 0.0375, 0.296875, -0.4332, -0.4874, 0.7581,
+0.075, 0.0625, 0.309375, -0.4332, -0.4874, 0.7581,
+0.065625, 0.05625, 0.3, -0.4332, -0.4874, 0.7581,
+-0.08125, 0.0375, 0.296875, 0.6684, -0.4595, 0.5849,
+-0.075, 0.0625, 0.309375, 0.6684, -0.4595, 0.5849,
+-0.090625, 0.04375, 0.3125, 0.6684, -0.4595, 0.5849,
+0.08125, 0.0375, 0.296875, -0.1599, -0.8797, 0.4478,
+0.15, 0.025, 0.296875, -0.1599, -0.8797, 0.4478,
+0.090625, 0.04375, 0.3125, -0.1599, -0.8797, 0.4478,
+-0.15, 0.025, 0.296875, 0.1599, -0.8797, 0.4478,
+-0.08125, 0.0375, 0.296875, 0.1599, -0.8797, 0.4478,
+-0.090625, 0.04375, 0.3125, 0.1599, -0.8797, 0.4478,
+0.15, 0.00625, 0.28125, 0.39, -0.5895, 0.7074,
+0.190625, 0.040625, 0.2875, 0.39, -0.5895, 0.7074,
+0.15, 0.025, 0.296875, 0.39, -0.5895, 0.7074,
+-0.190625, 0.040625, 0.2875, -0.39, -0.5895, 0.7074,
+-0.15, 0.00625, 0.28125, -0.39, -0.5895, 0.7074,
+-0.15, 0.025, 0.296875, -0.39, -0.5895, 0.7074,
+0.196875, 0.025, 0.26875, 0.6547, -0.4589, 0.6007,
+0.23125, 0.078125, 0.271875, 0.6547, -0.4589, 0.6007,
+0.190625, 0.040625, 0.2875, 0.6547, -0.4589, 0.6007,
+-0.23125, 0.078125, 0.271875, -0.6547, -0.4589, 0.6007,
+-0.196875, 0.025, 0.26875, -0.6547, -0.4589, 0.6007,
+-0.190625, 0.040625, 0.2875, -0.6547, -0.4589, 0.6007,
+0.25, 0.075, 0.259375, 0.5378, -0.1144, 0.8353,
+0.234375, 0.115625, 0.275, 0.5378, -0.1144, 0.8353,
+0.23125, 0.078125, 0.271875, 0.5378, -0.1144, 0.8353,
+-0.234375, 0.115625, 0.275, -0.5378, -0.1144, 0.8353,
+-0.25, 0.075, 0.259375, -0.5378, -0.1144, 0.8353,
+-0.23125, 0.078125, 0.271875, -0.5378, -0.1144, 0.8353,
+0.240625, 0.15, 0.265625, 0.5657, 0.1197, 0.8159,
+0.234375, 0.115625, 0.275, 0.5657, 0.1197, 0.8159,
+0.25625, 0.11875, 0.259375, 0.5657, 0.1197, 0.8159,
+-0.240625, 0.15, 0.265625, -0.5774, 0.1155, 0.8083,
+-0.234375, 0.115625, 0.275, -0.5774, 0.1155, 0.8083,
+-0.225, 0.140625, 0.278125, -0.5774, 0.1155, 0.8083,
+0.171875, 0.175, 0.2875, 0.4082, 0.4082, 0.8165,
+0.225, 0.140625, 0.278125, 0.4082, 0.4082, 0.8165,
+0.240625, 0.15, 0.265625, 0.4082, 0.4082, 0.8165,
+-0.171875, 0.175, 0.2875, -0.5214, 0.6574, 0.5441,
+-0.225, 0.140625, 0.278125, -0.5214, 0.6574, 0.5441,
+-0.16875, 0.159375, 0.309375, -0.5214, 0.6574, 0.5441,
+0.171875, 0.175, 0.2875, 0.1796, 0.7882, 0.5886,
+0.134375, 0.171875, 0.303125, 0.1796, 0.7882, 0.5886,
+0.16875, 0.159375, 0.309375, 0.1796, 0.7882, 0.5886,
+-0.134375, 0.171875, 0.303125, -0.1796, 0.7882, 0.5886,
+-0.171875, 0.175, 0.2875, -0.1796, 0.7882, 0.5886,
+-0.16875, 0.159375, 0.309375, -0.1796, 0.7882, 0.5886,
+0.13125, 0.190625, 0.296875, 0.1881, 0.3387, 0.9219,
+0.109375, 0.16875, 0.309375, 0.1881, 0.3387, 0.9219,
+0.134375, 0.171875, 0.303125, 0.1881, 0.3387, 0.9219,
+-0.109375, 0.16875, 0.309375, -0.1881, 0.3387, 0.9219,
+-0.13125, 0.190625, 0.296875, -0.1881, 0.3387, 0.9219,
+-0.134375, 0.171875, 0.303125, -0.1881, 0.3387, 0.9219,
+0.1, 0.1875, 0.303125, -0.087, 0.2756, 0.9573,
+0.084375, 0.15, 0.3125, -0.087, 0.2756, 0.9573,
+0.109375, 0.16875, 0.309375, -0.087, 0.2756, 0.9573,
+-0.084375, 0.15, 0.3125, 0.087, 0.2756, 0.9573,
+-0.1, 0.1875, 0.303125, 0.087, 0.2756, 0.9573,
+-0.109375, 0.16875, 0.309375, 0.087, 0.2756, 0.9573,
+0.084375, 0.15, 0.3125, 0.2804, -0.2181, 0.9348,
+0.1125, 0.159375, 0.30625, 0.2804, -0.2181, 0.9348,
+0.109375, 0.16875, 0.309375, 0.2804, -0.2181, 0.9348,
+-0.084375, 0.15, 0.3125, -0.3553, -0.5739, 0.7379,
+-0.1125, 0.159375, 0.30625, -0.3553, -0.5739, 0.7379,
+-0.09375, 0.14375, 0.303125, -0.3553, -0.5739, 0.7379,
+0.134375, 0.171875, 0.303125, 0.3015, -0.3015, 0.9045,
+0.1125, 0.159375, 0.30625, 0.3015, -0.3015, 0.9045,
+0.134375, 0.1625, 0.3, 0.3015, -0.3015, 0.9045,
+-0.1125, 0.159375, 0.30625, -0.3015, -0.3015, 0.9045,
+-0.134375, 0.171875, 0.303125, -0.3015, -0.3015, 0.9045,
+-0.134375, 0.1625, 0.3, -0.3015, -0.3015, 0.9045,
+0.134375, 0.171875, 0.303125, -0.3766, -0.8339, 0.4035,
+0.165625, 0.15625, 0.3, -0.3766, -0.8339, 0.4035,
+0.16875, 0.159375, 0.309375, -0.3766, -0.8339, 0.4035,
+-0.134375, 0.171875, 0.303125, 0.0631, -0.3156, 0.9468,
+-0.165625, 0.15625, 0.3, 0.0631, -0.3156, 0.9468,
+-0.134375, 0.1625, 0.3, 0.0631, -0.3156, 0.9468,
+0.16875, 0.159375, 0.309375, 0.0823, -0.7822, 0.6175,
+0.2125, 0.134375, 0.271875, 0.0823, -0.7822, 0.6175,
+0.225, 0.140625, 0.278125, 0.0823, -0.7822, 0.6175,
+-0.16875, 0.159375, 0.309375, 0.2016, -0.9071, 0.3696,
+-0.2125, 0.134375, 0.271875, 0.2016, -0.9071, 0.3696,
+-0.165625, 0.15625, 0.3, 0.2016, -0.9071, 0.3696,
+0.234375, 0.115625, 0.275, -0.3707, -0.2851, 0.8839,
+0.2125, 0.134375, 0.271875, -0.3707, -0.2851, 0.8839,
+0.221875, 0.1125, 0.26875, -0.3707, -0.2851, 0.8839,
+-0.2125, 0.134375, 0.271875, 0.3707, -0.2851, 0.8839,
+-0.234375, 0.115625, 0.275, 0.3707, -0.2851, 0.8839,
+-0.221875, 0.1125, 0.26875, 0.3707, -0.2851, 0.8839,
+0.234375, 0.115625, 0.275, -0.2692, -0.0577, 0.9614,
+0.21875, 0.084375, 0.26875, -0.2692, -0.0577, 0.9614,
+0.23125, 0.078125, 0.271875, -0.2692, -0.0577, 0.9614,
+-0.234375, 0.115625, 0.275, 0.4568, 0.0508, 0.8881,
+-0.21875, 0.084375, 0.26875, 0.4568, 0.0508, 0.8881,
+-0.221875, 0.1125, 0.26875, 0.4568, 0.0508, 0.8881,
+0.190625, 0.040625, 0.2875, -0.2797, 0.5245, 0.8042,
+0.21875, 0.084375, 0.26875, -0.2797, 0.5245, 0.8042,
+0.184375, 0.046875, 0.28125, -0.2797, 0.5245, 0.8042,
+-0.21875, 0.084375, 0.26875, 0.2797, 0.5245, 0.8042,
+-0.190625, 0.040625, 0.2875, 0.2797, 0.5245, 0.8042,
+-0.184375, 0.046875, 0.28125, 0.2797, 0.5245, 0.8042,
+0.190625, 0.040625, 0.2875, -0.0213, 0.5546, 0.8319,
+0.15, 0.034375, 0.290625, -0.0213, 0.5546, 0.8319,
+0.15, 0.025, 0.296875, -0.0213, 0.5546, 0.8319,
+-0.190625, 0.040625, 0.2875, 0.0487, 0.6815, 0.7302,
+-0.15, 0.034375, 0.290625, 0.0487, 0.6815, 0.7302,
+-0.184375, 0.046875, 0.28125, 0.0487, 0.6815, 0.7302,
+0.15, 0.025, 0.296875, 0.3778, 0.6342, 0.6746,
+0.096875, 0.05, 0.303125, 0.3778, 0.6342, 0.6746,
+0.090625, 0.04375, 0.3125, 0.3778, 0.6342, 0.6746,
+-0.15, 0.025, 0.296875, -0.3378, 0.5221, 0.7831,
+-0.096875, 0.05, 0.303125, -0.3378, 0.5221, 0.7831,
+-0.15, 0.034375, 0.290625, -0.3378, 0.5221, 0.7831,
+0.075, 0.0625, 0.309375, 0.4988, 0.53, 0.6858,
+0.096875, 0.05, 0.303125, 0.4988, 0.53, 0.6858,
+0.08125, 0.06875, 0.3, 0.4988, 0.53, 0.6858,
+-0.096875, 0.05, 0.303125, -0.4988, 0.53, 0.6858,
+-0.075, 0.0625, 0.309375, -0.4988, 0.53, 0.6858,
+-0.08125, 0.06875, 0.3, -0.4988, 0.53, 0.6858,
+0.084375, 0.15, 0.3125, 0.5425, -0.3391, 0.7686,
+0.078125, 0.11875, 0.303125, 0.5425, -0.3391, 0.7686,
+0.09375, 0.14375, 0.303125, 0.5425, -0.3391, 0.7686,
+-0.078125, 0.11875, 0.303125, -0.5425, -0.3391, 0.7686,
+-0.084375, 0.15, 0.3125, -0.5425, -0.3391, 0.7686,
+-0.09375, 0.14375, 0.303125, -0.5425, -0.3391, 0.7686,
+0.071875, 0.11875, 0.3125, 0.8305, -0.0615, 0.5537,
+0.078125, 0.090625, 0.3, 0.8305, -0.0615, 0.5537,
+0.078125, 0.11875, 0.303125, 0.8305, -0.0615, 0.5537,
+-0.078125, 0.090625, 0.3, -0.8305, -0.0615, 0.5537,
+-0.071875, 0.11875, 0.3125, -0.8305, -0.0615, 0.5537,
+-0.078125, 0.11875, 0.303125, -0.8305, -0.0615, 0.5537,
+0.06875, 0.0875, 0.3125, 0.7814, 0.1116, 0.614,
+0.08125, 0.06875, 0.3, 0.7814, 0.1116, 0.614,
+0.078125, 0.090625, 0.3, 0.7814, 0.1116, 0.614,
+-0.08125, 0.06875, 0.3, -0.7814, 0.1116, 0.614,
+-0.06875, 0.0875, 0.3125, -0.7814, 0.1116, 0.614,
+-0.078125, 0.090625, 0.3, -0.7814, 0.1116, 0.614,
+ 0, 0.171875, 0.296875, -0.4338, 0.8888, -0.1481,
+0.04375, 0.184375, 0.24375, -0.4338, 0.8888, -0.1481,
+ 0, 0.1625, 0.240625, -0.4338, 0.8888, -0.1481,
+-0.04375, 0.184375, 0.24375, 0.4338, 0.8888, -0.1481,
+ 0, 0.171875, 0.296875, 0.4338, 0.8888, -0.1481,
+ 0, 0.1625, 0.240625, 0.4338, 0.8888, -0.1481,
+0.025, 0.196875, 0.3, -0.8515, 0.3744, -0.367,
+0.078125, 0.265625, 0.246875, -0.8515, 0.3744, -0.367,
+0.04375, 0.184375, 0.24375, -0.8515, 0.3744, -0.367,
+-0.078125, 0.265625, 0.246875, 0.8515, 0.3744, -0.367,
+-0.025, 0.196875, 0.3, 0.8515, 0.3744, -0.367,
+-0.04375, 0.184375, 0.24375, 0.8515, 0.3744, -0.367,
+0.128125, 0.303125, 0.29375, -0.2664, 0.871, -0.4127,
+0.078125, 0.265625, 0.246875, -0.2664, 0.871, -0.4127,
+0.0625, 0.2875, 0.303125, -0.2664, 0.871, -0.4127,
+-0.128125, 0.303125, 0.29375, 0.2197, 0.8626, -0.4557,
+-0.078125, 0.265625, 0.246875, 0.2197, 0.8626, -0.4557,
+-0.134375, 0.275, 0.2375, 0.2197, 0.8626, -0.4557,
+0.196875, 0.240625, 0.275, 0.5932, 0.7445, -0.3063,
+0.134375, 0.275, 0.2375, 0.5932, 0.7445, -0.3063,
+0.128125, 0.303125, 0.29375, 0.5932, 0.7445, -0.3063,
+-0.196875, 0.240625, 0.275, -0.5914, 0.7489, -0.2991,
+-0.134375, 0.275, 0.2375, -0.5914, 0.7489, -0.2991,
+-0.19375, 0.221875, 0.221875, -0.5914, 0.7489, -0.2991,
+0.284375, 0.19375, 0.25, 0.3714, 0.8685, -0.3284,
+0.19375, 0.221875, 0.221875, 0.3714, 0.8685, -0.3284,
+0.196875, 0.240625, 0.275, 0.3714, 0.8685, -0.3284,
+-0.284375, 0.19375, 0.25, -0.3653, 0.8833, -0.2938,
+-0.19375, 0.221875, 0.221875, -0.3653, 0.8833, -0.2938,
+-0.271875, 0.18125, 0.196875, -0.3653, 0.8833, -0.2938,
+0.284375, 0.19375, 0.25, 0.2901, 0.9141, -0.2833,
+0.31875, 0.1625, 0.184375, 0.2901, 0.9141, -0.2833,
+0.271875, 0.18125, 0.196875, 0.2901, 0.9141, -0.2833,
+-0.31875, 0.1625, 0.184375, -0.2901, 0.9141, -0.2833,
+-0.284375, 0.19375, 0.25, -0.2901, 0.9141, -0.2833,
+-0.271875, 0.18125, 0.196875, -0.2901, 0.9141, -0.2833,
+0.33125, 0.059375, 0.178125, 0.8873, 0.1343, -0.4412,
+0.31875, 0.1625, 0.184375, 0.8873, 0.1343, -0.4412,
+0.34375, 0.171875, 0.2375, 0.8873, 0.1343, -0.4412,
+-0.33125, 0.059375, 0.178125, -0.7964, 0.1323, -0.5901,
+-0.31875, 0.1625, 0.184375, -0.7964, 0.1323, -0.5901,
+-0.309375, 0.065625, 0.15, -0.7964, 0.1323, -0.5901,
+0.33125, 0.059375, 0.178125, 0.5108, -0.6649, -0.545,
+0.240625, 0, 0.165625, 0.5108, -0.6649, -0.545,
+0.309375, 0.065625, 0.15, 0.5108, -0.6649, -0.545,
+-0.240625, 0, 0.165625, -0.5108, -0.6649, -0.545,
+-0.33125, 0.059375, 0.178125, -0.5108, -0.6649, -0.545,
+-0.309375, 0.065625, 0.15, -0.5108, -0.6649, -0.545,
+0.253125, -0.015625, 0.215625, 0.3695, -0.8566, -0.3601,
+0.175, -0.0375, 0.1875, 0.3695, -0.8566, -0.3601,
+0.240625, 0, 0.165625, 0.3695, -0.8566, -0.3601,
+-0.175, -0.0375, 0.1875, -0.3695, -0.8566, -0.3601,
+-0.253125, -0.015625, 0.215625, -0.3695, -0.8566, -0.3601,
+-0.240625, 0, 0.165625, -0.3695, -0.8566, -0.3601,
+ 0, -0.19375, 0.1125, 0.3617, -0.3858, -0.8487,
+0.05, -0.215625, 0.14375, 0.3617, -0.3858, -0.8487,
+ 0, -0.228125, 0.128125, 0.3617, -0.3858, -0.8487,
+ 0, -0.19375, 0.1125, -0.1649, -0.6644, -0.7289,
+-0.05, -0.215625, 0.14375, -0.1649, -0.6644, -0.7289,
+-0.071875, -0.165625, 0.103125, -0.1649, -0.6644, -0.7289,
+ 0, -0.228125, 0.128125, 0.1952, -0.0976, -0.9759,
+0.05625, -0.303125, 0.146875, 0.1952, -0.0976, -0.9759,
+ 0, -0.321875, 0.1375, 0.1952, -0.0976, -0.9759,
+ 0, -0.228125, 0.128125, -0.3011, -0.0125, -0.9535,
+-0.05625, -0.303125, 0.146875, -0.3011, -0.0125, -0.9535,
+-0.05, -0.215625, 0.14375, -0.3011, -0.0125, -0.9535,
+ 0, -0.321875, 0.1375, -0.0107, -0.5633, -0.8262,
+0.065625, -0.378125, 0.175, -0.0107, -0.5633, -0.8262,
+ 0, -0.390625, 0.184375, -0.0107, -0.5633, -0.8262,
+ 0, -0.321875, 0.1375, -0.2562, -0.3112, -0.9152,
+-0.065625, -0.378125, 0.175, -0.2562, -0.3112, -0.9152,
+-0.05625, -0.303125, 0.146875, -0.2562, -0.3112, -0.9152,
+0.071875, -0.3875, 0.221875, 0.1533, -0.9649, -0.2134,
+ 0, -0.390625, 0.184375, 0.1533, -0.9649, -0.2134,
+0.065625, -0.378125, 0.175, 0.1533, -0.9649, -0.2134,
+ 0, -0.390625, 0.184375, -0.1533, -0.9649, -0.2134,
+-0.071875, -0.3875, 0.221875, -0.1533, -0.9649, -0.2134,
+-0.065625, -0.378125, 0.175, -0.1533, -0.9649, -0.2134,
+0.13125, -0.378125, 0.209375, 0.126, -0.9624, -0.2406,
+0.065625, -0.378125, 0.175, 0.126, -0.9624, -0.2406,
+0.13125, -0.365625, 0.159375, 0.126, -0.9624, -0.2406,
+-0.065625, -0.378125, 0.175, -0.126, -0.9624, -0.2406,
+-0.13125, -0.378125, 0.209375, -0.126, -0.9624, -0.2406,
+-0.13125, -0.365625, 0.159375, -0.126, -0.9624, -0.2406,
+0.146875, -0.35625, 0.2125, 0.9396, 0.1573, -0.3041,
+0.13125, -0.365625, 0.159375, 0.9396, 0.1573, -0.3041,
+0.115625, -0.284375, 0.153125, 0.9396, 0.1573, -0.3041,
+-0.13125, -0.365625, 0.159375, -0.9396, 0.1573, -0.3041,
+-0.146875, -0.35625, 0.2125, -0.9396, 0.1573, -0.3041,
+-0.115625, -0.284375, 0.153125, -0.9396, 0.1573, -0.3041,
+0.140625, -0.278125, 0.228125, 0.9278, 0.1838, -0.3246,
+0.115625, -0.284375, 0.153125, 0.9278, 0.1838, -0.3246,
+0.1, -0.2, 0.15625, 0.9278, 0.1838, -0.3246,
+-0.115625, -0.284375, 0.153125, -0.9278, 0.1838, -0.3246,
+-0.140625, -0.278125, 0.228125, -0.9278, 0.1838, -0.3246,
+-0.1, -0.2, 0.15625, -0.9278, 0.1838, -0.3246,
+0.115625, -0.284375, 0.153125, 0.2192, 0.0766, -0.9727,
+0.05, -0.215625, 0.14375, 0.2192, 0.0766, -0.9727,
+0.1, -0.2, 0.15625, 0.2192, 0.0766, -0.9727,
+-0.05, -0.215625, 0.14375, -0.2192, 0.0766, -0.9727,
+-0.115625, -0.284375, 0.153125, -0.2192, 0.0766, -0.9727,
+-0.1, -0.2, 0.15625, -0.2192, 0.0766, -0.9727,
+0.13125, -0.365625, 0.159375, 0.1211, -0.053, -0.9912,
+0.05625, -0.303125, 0.146875, 0.1211, -0.053, -0.9912,
+0.115625, -0.284375, 0.153125, 0.1211, -0.053, -0.9912,
+-0.13125, -0.365625, 0.159375, 0.1497, -0.3635, -0.9195,
+-0.05625, -0.303125, 0.146875, 0.1497, -0.3635, -0.9195,
+-0.065625, -0.378125, 0.175, 0.1497, -0.3635, -0.9195,
+0.1, -0.2, 0.15625, 0.9094, 0.1371, -0.3927,
+0.071875, -0.165625, 0.103125, 0.9094, 0.1371, -0.3927,
+0.09375, -0.140625, 0.1625, 0.9094, 0.1371, -0.3927,
+-0.1, -0.2, 0.15625, -0.3706, -0.678, -0.6349,
+-0.071875, -0.165625, 0.103125, -0.3706, -0.678, -0.6349,
+-0.05, -0.215625, 0.14375, -0.3706, -0.678, -0.6349,
+0.125, -0.175, 0.228125, 0.9202, 0.1355, -0.3672,
+0.1, -0.2, 0.15625, 0.9202, 0.1355, -0.3672,
+0.09375, -0.140625, 0.1625, 0.9202, 0.1355, -0.3672,
+-0.1, -0.2, 0.15625, -0.9202, 0.1355, -0.3672,
+-0.125, -0.175, 0.228125, -0.9202, 0.1355, -0.3672,
+-0.09375, -0.140625, 0.1625, -0.9202, 0.1355, -0.3672,
+0.0875, -0.1125, 0.171875, 0.9173, 0.344, -0.2007,
+0.09375, -0.1, 0.221875, 0.9173, 0.344, -0.2007,
+0.103125, -0.125, 0.221875, 0.9173, 0.344, -0.2007,
+-0.0875, -0.1125, 0.171875, -0.9457, 0.2673, -0.185,
+-0.09375, -0.1, 0.221875, -0.9457, 0.2673, -0.185,
+-0.084375, -0.090625, 0.1875, -0.9457, 0.2673, -0.185,
+0.09375, -0.140625, 0.1625, 0.9004, 0.3642, -0.238,
+0.103125, -0.125, 0.221875, 0.9004, 0.3642, -0.238,
+0.125, -0.175, 0.228125, 0.9004, 0.3642, -0.238,
+-0.09375, -0.140625, 0.1625, -0.9337, 0.2813, -0.2215,
+-0.103125, -0.125, 0.221875, -0.9337, 0.2813, -0.2215,
+-0.0875, -0.1125, 0.171875, -0.9337, 0.2813, -0.2215,
+0.09375, -0.1, 0.221875, 0.8945, 0.4337, 0.1084,
+0.08125, -0.06875, 0.2, 0.8945, 0.4337, 0.1084,
+0.08125, -0.075, 0.225, 0.8945, 0.4337, 0.1084,
+-0.09375, -0.1, 0.221875, -0.9501, 0.2455, -0.1922,
+-0.08125, -0.06875, 0.2, -0.9501, 0.2455, -0.1922,
+-0.084375, -0.090625, 0.1875, -0.9501, 0.2455, -0.1922,
+0.08125, -0.06875, 0.2, 0.1596, -0.9577, -0.2394,
+0.175, -0.05625, 0.2125, 0.1596, -0.9577, -0.2394,
+0.08125, -0.075, 0.225, 0.1596, -0.9577, -0.2394,
+-0.08125, -0.06875, 0.2, -0.1835, -0.7864, -0.5898,
+-0.175, -0.05625, 0.2125, -0.1835, -0.7864, -0.5898,
+-0.175, -0.0375, 0.1875, -0.1835, -0.7864, -0.5898,
+0.134375, 0.021875, -0.265625, 0.3693, -0.4712, -0.801,
+ 0, -0.078125, -0.26875, 0.3693, -0.4712, -0.801,
+ 0, 0.028125, -0.33125, 0.3693, -0.4712, -0.801,
+-0.134375, 0.021875, -0.265625, -0.3727, -0.4759, -0.7966,
+ 0, -0.078125, -0.26875, -0.3727, -0.4759, -0.7966,
+-0.1375, -0.059375, -0.215625, -0.3727, -0.4759, -0.7966,
+0.1375, -0.059375, -0.215625, 0.2986, -0.8236, -0.4821,
+ 0, -0.153125, -0.140625, 0.2986, -0.8236, -0.4821,
+ 0, -0.078125, -0.26875, 0.2986, -0.8236, -0.4821,
+-0.1375, -0.059375, -0.215625, -0.3263, -0.8342, -0.4446,
+ 0, -0.153125, -0.140625, -0.3263, -0.8342, -0.4446,
+-0.11875, -0.125, -0.10625, -0.3263, -0.8342, -0.4446,
+ 0, -0.153125, -0.140625, 0.2995, -0.9442, -0.1368,
+0.084375, -0.15625, 0.065625, 0.2995, -0.9442, -0.1368,
+ 0, -0.184375, 0.075, 0.2995, -0.9442, -0.1368,
+-0.084375, -0.15625, 0.065625, -0.2995, -0.9442, -0.1368,
+ 0, -0.153125, -0.140625, -0.2995, -0.9442, -0.1368,
+ 0, -0.184375, 0.075, -0.2995, -0.9442, -0.1368,
+ 0, -0.184375, 0.075, 0.3287, -0.9163, -0.2291,
+0.071875, -0.165625, 0.103125, 0.3287, -0.9163, -0.2291,
+ 0, -0.19375, 0.1125, 0.3287, -0.9163, -0.2291,
+-0.071875, -0.165625, 0.103125, -0.3287, -0.9163, -0.2291,
+ 0, -0.184375, 0.075, -0.3287, -0.9163, -0.2291,
+ 0, -0.19375, 0.1125, -0.3287, -0.9163, -0.2291,
+0.071875, -0.165625, 0.103125, 0.8305, 0.3333, -0.4463,
+0.0875, -0.1125, 0.171875, 0.8305, 0.3333, -0.4463,
+0.09375, -0.140625, 0.1625, 0.8305, 0.3333, -0.4463,
+-0.071875, -0.165625, 0.103125, -0.8642, -0.4737, 0.1696,
+-0.0875, -0.1125, 0.171875, -0.8642, -0.4737, 0.1696,
+-0.084375, -0.15625, 0.065625, -0.8642, -0.4737, 0.1696,
+0.309375, 0.065625, 0.15, 0.9166, -0.374, 0.1414,
+0.29375, -0.01875, 0.028125, 0.9166, -0.374, 0.1414,
+0.340625, 0.09375, 0.021875, 0.9166, -0.374, 0.1414,
+-0.29375, -0.01875, 0.028125, -0.9166, -0.374, 0.1414,
+-0.309375, 0.065625, 0.15, -0.9166, -0.374, 0.1414,
+-0.340625, 0.09375, 0.021875, -0.9166, -0.374, 0.1414,
+0.184375, 0.175, -0.28125, 0.295, -0.0454, -0.9544,
+ 0, 0.028125, -0.33125, 0.295, -0.0454, -0.9544,
+ 0, 0.225, -0.340625, 0.295, -0.0454, -0.9544,
+-0.184375, 0.175, -0.28125, -0.4189, -0.2265, -0.8793,
+ 0, 0.028125, -0.33125, -0.4189, -0.2265, -0.8793,
+-0.134375, 0.021875, -0.265625, -0.4189, -0.2265, -0.8793,
+0.18125, 0.340625, 0.09375, 0.1272, 0.9658, 0.226,
+ 0, 0.39375, -0.03125, 0.1272, 0.9658, 0.226,
+ 0, 0.359375, 0.115625, 0.1272, 0.9658, 0.226,
+-0.18125, 0.340625, 0.09375, -0.1119, 0.9626, 0.2468,
+ 0, 0.39375, -0.03125, -0.1119, 0.9626, 0.2468,
+-0.18125, 0.371875, -0.028125, -0.1119, 0.9626, 0.2468,
+ 0, 0.39375, -0.03125, 0.132, 0.975, -0.1788,
+0.18125, 0.346875, -0.153125, 0.132, 0.975, -0.1788,
+ 0, 0.359375, -0.21875, 0.132, 0.975, -0.1788,
+-0.18125, 0.346875, -0.153125, -0.132, 0.975, -0.1788,
+ 0, 0.39375, -0.03125, -0.132, 0.975, -0.1788,
+ 0, 0.359375, -0.21875, -0.132, 0.975, -0.1788,
+ 0, 0.359375, -0.21875, 0.3878, 0.6192, -0.6828,
+0.184375, 0.175, -0.28125, 0.3878, 0.6192, -0.6828,
+ 0, 0.225, -0.340625, 0.3878, 0.6192, -0.6828,
+-0.184375, 0.175, -0.28125, -0.3878, 0.6192, -0.6828,
+ 0, 0.359375, -0.21875, -0.3878, 0.6192, -0.6828,
+ 0, 0.225, -0.340625, -0.3878, 0.6192, -0.6828,
+0.271875, 0.18125, 0.196875, 0.4951, 0.8618, -0.11,
+0.290625, 0.1625, 0.134375, 0.4951, 0.8618, -0.11,
+0.253125, 0.18125, 0.1125, 0.4951, 0.8618, -0.11,
+-0.290625, 0.1625, 0.134375, -0.4951, 0.8618, -0.11,
+-0.271875, 0.18125, 0.196875, -0.4951, 0.8618, -0.11,
+-0.253125, 0.18125, 0.1125, -0.4951, 0.8618, -0.11,
+0.253125, 0.18125, 0.1125, 0.2561, 0.6447, 0.7202,
+0.31875, 0.225, 0.05, 0.2561, 0.6447, 0.7202,
+0.25625, 0.28125, 0.021875, 0.2561, 0.6447, 0.7202,
+-0.31875, 0.225, 0.05, -0.2561, 0.6447, 0.7202,
+-0.253125, 0.18125, 0.1125, -0.2561, 0.6447, 0.7202,
+-0.25625, 0.28125, 0.021875, -0.2561, 0.6447, 0.7202,
+0.25625, 0.28125, 0.021875, 0.5966, 0.7888, 0.1479,
+0.31875, 0.246875, -0.046875, 0.5966, 0.7888, 0.1479,
+0.25625, 0.3, -0.078125, 0.5966, 0.7888, 0.1479,
+-0.31875, 0.246875, -0.046875, -0.5966, 0.7888, 0.1479,
+-0.25625, 0.28125, 0.021875, -0.5966, 0.7888, 0.1479,
+-0.25625, 0.3, -0.078125, -0.5966, 0.7888, 0.1479,
+0.25625, 0.3, -0.078125, 0.7125, 0.6755, -0.19,
+0.31875, 0.215625, -0.14375, 0.7125, 0.6755, -0.19,
+0.25625, 0.271875, -0.178125, 0.7125, 0.6755, -0.19,
+-0.31875, 0.215625, -0.14375, -0.7125, 0.6755, -0.19,
+-0.25625, 0.3, -0.078125, -0.7125, 0.6755, -0.19,
+-0.25625, 0.271875, -0.178125, -0.7125, 0.6755, -0.19,
+0.246875, 0.13125, -0.234375, 0.7104, 0.1364, -0.6904,
+0.31875, 0.215625, -0.14375, 0.7104, 0.1364, -0.6904,
+0.309375, 0.10625, -0.175, 0.7104, 0.1364, -0.6904,
+-0.246875, 0.13125, -0.234375, -0.6304, 0.2517, -0.7343,
+-0.31875, 0.215625, -0.14375, -0.6304, 0.2517, -0.7343,
+-0.25625, 0.271875, -0.178125, -0.6304, 0.2517, -0.7343,
+0.184375, 0.175, -0.28125, 0.6823, 0.2318, -0.6933,
+0.25625, 0.271875, -0.178125, 0.6823, 0.2318, -0.6933,
+0.246875, 0.13125, -0.234375, 0.6823, 0.2318, -0.6933,
+-0.25625, 0.271875, -0.178125, -0.6823, 0.2318, -0.6933,
+-0.184375, 0.175, -0.28125, -0.6823, 0.2318, -0.6933,
+-0.246875, 0.13125, -0.234375, -0.6823, 0.2318, -0.6933,
+0.18125, 0.346875, -0.153125, 0.6574, 0.7254, -0.204,
+0.25625, 0.3, -0.078125, 0.6574, 0.7254, -0.204,
+0.25625, 0.271875, -0.178125, 0.6574, 0.7254, -0.204,
+-0.25625, 0.3, -0.078125, -0.6574, 0.7254, -0.204,
+-0.18125, 0.346875, -0.153125, -0.6574, 0.7254, -0.204,
+-0.25625, 0.271875, -0.178125, -0.6574, 0.7254, -0.204,
+0.18125, 0.371875, -0.028125, 0.7289, 0.6729, 0.1262,
+0.25625, 0.28125, 0.021875, 0.7289, 0.6729, 0.1262,
+0.25625, 0.3, -0.078125, 0.7289, 0.6729, 0.1262,
+-0.25625, 0.28125, 0.021875, -0.7289, 0.6729, 0.1262,
+-0.18125, 0.371875, -0.028125, -0.7289, 0.6729, 0.1262,
+-0.25625, 0.3, -0.078125, -0.7289, 0.6729, 0.1262,
+0.18125, 0.340625, 0.09375, 0.7791, 0.4074, 0.4764,
+0.253125, 0.18125, 0.1125, 0.7791, 0.4074, 0.4764,
+0.25625, 0.28125, 0.021875, 0.7791, 0.4074, 0.4764,
+-0.253125, 0.18125, 0.1125, -0.7791, 0.4074, 0.4764,
+-0.18125, 0.340625, 0.09375, -0.7791, 0.4074, 0.4764,
+-0.25625, 0.28125, 0.021875, -0.7791, 0.4074, 0.4764,
+0.271875, 0.18125, 0.196875, 0.3669, 0.884, -0.2898,
+0.184375, 0.209375, 0.171875, 0.3669, 0.884, -0.2898,
+0.19375, 0.221875, 0.221875, 0.3669, 0.884, -0.2898,
+-0.271875, 0.18125, 0.196875, -0.3238, 0.9434, -0.072,
+-0.184375, 0.209375, 0.171875, -0.3238, 0.9434, -0.072,
+-0.253125, 0.18125, 0.1125, -0.3238, 0.9434, -0.072,
+0.184375, 0.209375, 0.171875, 0.2854, 0.6237, 0.7277,
+ 0, 0.359375, 0.115625, 0.2854, 0.6237, 0.7277,
+ 0, 0.228125, 0.228125, 0.2854, 0.6237, 0.7277,
+-0.184375, 0.209375, 0.171875, -0.1548, 0.508, 0.8473,
+ 0, 0.359375, 0.115625, -0.1548, 0.508, 0.8473,
+-0.18125, 0.340625, 0.09375, -0.1548, 0.508, 0.8473,
+0.04375, 0.184375, 0.24375, -0.1681, 0.1005, -0.9806,
+0.134375, 0.275, 0.2375, -0.1681, 0.1005, -0.9806,
+0.19375, 0.221875, 0.221875, -0.1681, 0.1005, -0.9806,
+-0.134375, 0.275, 0.2375, 0.1681, 0.1005, -0.9806,
+-0.04375, 0.184375, 0.24375, 0.1681, 0.1005, -0.9806,
+-0.19375, 0.221875, 0.221875, 0.1681, 0.1005, -0.9806,
+0.04375, 0.184375, 0.24375, 0.2925, 0.5674, 0.7697,
+0.184375, 0.209375, 0.171875, 0.2925, 0.5674, 0.7697,
+ 0, 0.228125, 0.228125, 0.2925, 0.5674, 0.7697,
+-0.184375, 0.209375, 0.171875, -0.2925, 0.5674, 0.7697,
+-0.04375, 0.184375, 0.24375, -0.2925, 0.5674, 0.7697,
+ 0, 0.228125, 0.228125, -0.2925, 0.5674, 0.7697,
+ 0, 0.1625, 0.240625, -0.1616, 0.1847, 0.9694,
+0.04375, 0.184375, 0.24375, -0.1616, 0.1847, 0.9694,
+ 0, 0.228125, 0.228125, -0.1616, 0.1847, 0.9694,
+ 0, 0.228125, 0.228125, 0.1616, 0.1847, 0.9694,
+-0.04375, 0.184375, 0.24375, 0.1616, 0.1847, 0.9694,
+ 0, 0.1625, 0.240625, 0.1616, 0.1847, 0.9694,
+0.309375, 0.065625, 0.15, 0.8681, 0.0893, -0.4883,
+0.290625, 0.1625, 0.134375, 0.8681, 0.0893, -0.4883,
+0.31875, 0.1625, 0.184375, 0.8681, 0.0893, -0.4883,
+-0.309375, 0.065625, 0.15, -0.934, 0.2255, 0.2773,
+-0.290625, 0.1625, 0.134375, -0.934, 0.2255, 0.2773,
+-0.340625, 0.09375, 0.021875, -0.934, 0.2255, 0.2773,
+0.340625, 0.09375, 0.021875, 0.9276, 0.0762, 0.3657,
+0.31875, 0.225, 0.05, 0.9276, 0.0762, 0.3657,
+0.290625, 0.1625, 0.134375, 0.9276, 0.0762, 0.3657,
+-0.31875, 0.225, 0.05, -0.9276, 0.0762, 0.3657,
+-0.340625, 0.09375, 0.021875, -0.9276, 0.0762, 0.3657,
+-0.290625, 0.1625, 0.134375, -0.9276, 0.0762, 0.3657,
+0.34375, 0.128125, -0.01875, 0.975, 0.2169, 0.049,
+0.31875, 0.246875, -0.046875, 0.975, 0.2169, 0.049,
+0.31875, 0.225, 0.05, 0.975, 0.2169, 0.049,
+-0.31875, 0.246875, -0.046875, -0.975, 0.2169, 0.049,
+-0.34375, 0.128125, -0.01875, -0.975, 0.2169, 0.049,
+-0.31875, 0.225, 0.05, -0.975, 0.2169, 0.049,
+0.31875, 0.215625, -0.14375, 0.9817, -0.0304, -0.1882,
+0.328125, 0.13125, -0.08125, 0.9817, -0.0304, -0.1882,
+0.309375, 0.10625, -0.175, 0.9817, -0.0304, -0.1882,
+-0.31875, 0.215625, -0.14375, -0.9956, 0.0893, -0.0288,
+-0.328125, 0.13125, -0.08125, -0.9956, 0.0893, -0.0288,
+-0.31875, 0.246875, -0.046875, -0.9956, 0.0893, -0.0288,
+0.11875, -0.125, -0.10625, 0.7466, -0.6646, 0.0285,
+0.1625, -0.06875, 0.059375, 0.7466, -0.6646, 0.0285,
+0.084375, -0.15625, 0.065625, 0.7466, -0.6646, 0.0285,
+-0.11875, -0.125, -0.10625, -0.6374, -0.7651, 0.0915,
+-0.1625, -0.06875, 0.059375, -0.6374, -0.7651, 0.0915,
+-0.171875, -0.078125, -0.084375, -0.6374, -0.7651, 0.0915,
+0.1625, -0.06875, 0.059375, 0.3723, -0.9243, 0.0847,
+0.2375, -0.05, -0.065625, 0.3723, -0.9243, 0.0847,
+0.29375, -0.01875, 0.028125, 0.3723, -0.9243, 0.0847,
+-0.1625, -0.06875, 0.059375, -0.372, -0.9244, 0.0845,
+-0.2375, -0.05, -0.065625, -0.372, -0.9244, 0.0845,
+-0.171875, -0.078125, -0.084375, -0.372, -0.9244, 0.0845,
+0.240625, 0, 0.165625, 0.3986, -0.8754, 0.2734,
+0.1625, -0.06875, 0.059375, 0.3986, -0.8754, 0.2734,
+0.29375, -0.01875, 0.028125, 0.3986, -0.8754, 0.2734,
+-0.1625, -0.06875, 0.059375, -0.3986, -0.8754, 0.2734,
+-0.240625, 0, 0.165625, -0.3986, -0.8754, 0.2734,
+-0.29375, -0.01875, 0.028125, -0.3986, -0.8754, 0.2734,
+0.175, -0.0375, 0.1875, 0.6328, -0.7642, 0.1247,
+0.0875, -0.1125, 0.171875, 0.6328, -0.7642, 0.1247,
+0.1625, -0.06875, 0.059375, 0.6328, -0.7642, 0.1247,
+-0.0875, -0.1125, 0.171875, -0.6328, -0.7642, 0.1247,
+-0.175, -0.0375, 0.1875, -0.6328, -0.7642, 0.1247,
+-0.1625, -0.06875, 0.059375, -0.6328, -0.7642, 0.1247,
+0.0875, -0.1125, 0.171875, 0.7325, -0.6368, 0.2407,
+0.084375, -0.15625, 0.065625, 0.7325, -0.6368, 0.2407,
+0.1625, -0.06875, 0.059375, 0.7325, -0.6368, 0.2407,
+-0.1625, -0.06875, 0.059375, -0.7325, -0.6368, 0.2407,
+-0.084375, -0.15625, 0.065625, -0.7325, -0.6368, 0.2407,
+-0.0875, -0.1125, 0.171875, -0.7325, -0.6368, 0.2407,
+0.175, -0.0375, 0.1875, 0.2637, -0.4499, 0.8533,
+0.08125, -0.06875, 0.2, 0.2637, -0.4499, 0.8533,
+0.084375, -0.090625, 0.1875, 0.2637, -0.4499, 0.8533,
+-0.084375, -0.090625, 0.1875, -0.2637, -0.4499, 0.8533,
+-0.08125, -0.06875, 0.2, -0.2637, -0.4499, 0.8533,
+-0.175, -0.0375, 0.1875, -0.2637, -0.4499, 0.8533,
+0.25625, -0.003125, -0.171875, 0.5881, -0.307, -0.7483,
+0.246875, 0.13125, -0.234375, 0.5881, -0.307, -0.7483,
+0.309375, 0.10625, -0.175, 0.5881, -0.307, -0.7483,
+-0.25625, -0.003125, -0.171875, -0.5236, -0.329, -0.7859,
+-0.246875, 0.13125, -0.234375, -0.5236, -0.329, -0.7859,
+-0.19375, 0.009375, -0.21875, -0.5236, -0.329, -0.7859,
+0.246875, 0.13125, -0.234375, 0.4694, -0.24, -0.8498,
+0.134375, 0.021875, -0.265625, 0.4694, -0.24, -0.8498,
+0.184375, 0.175, -0.28125, 0.4694, -0.24, -0.8498,
+-0.246875, 0.13125, -0.234375, -0.5396, -0.3343, -0.7727,
+-0.134375, 0.021875, -0.265625, -0.5396, -0.3343, -0.7727,
+-0.19375, 0.009375, -0.21875, -0.5396, -0.3343, -0.7727,
+0.171875, -0.078125, -0.084375, 0.4463, -0.8452, -0.2941,
+0.25625, -0.003125, -0.171875, 0.4463, -0.8452, -0.2941,
+0.2375, -0.05, -0.065625, 0.4463, -0.8452, -0.2941,
+-0.171875, -0.078125, -0.084375, -0.2144, -0.8341, -0.5082,
+-0.25625, -0.003125, -0.171875, -0.2144, -0.8341, -0.5082,
+-0.19375, 0.009375, -0.21875, -0.2144, -0.8341, -0.5082,
+0.1375, -0.059375, -0.215625, 0.6973, -0.661, -0.2771,
+0.171875, -0.078125, -0.084375, 0.6973, -0.661, -0.2771,
+0.11875, -0.125, -0.10625, 0.6973, -0.661, -0.2771,
+-0.1375, -0.059375, -0.215625, -0.7365, -0.6154, -0.2808,
+-0.171875, -0.078125, -0.084375, -0.7365, -0.6154, -0.2808,
+-0.19375, 0.009375, -0.21875, -0.7365, -0.6154, -0.2808,
+0.134375, 0.021875, -0.265625, 0.4972, -0.4408, -0.7473,
+0.19375, 0.009375, -0.21875, 0.4972, -0.4408, -0.7473,
+0.1375, -0.059375, -0.215625, 0.4972, -0.4408, -0.7473,
+-0.1375, -0.059375, -0.215625, -0.4972, -0.4408, -0.7473,
+-0.19375, 0.009375, -0.21875, -0.4972, -0.4408, -0.7473,
+-0.134375, 0.021875, -0.265625, -0.4972, -0.4408, -0.7473,
+0.35625, 0.1625, -0.09375, 0.3691, 0.2855, 0.8844,
+0.40625, 0.165625, -0.115625, 0.3691, 0.2855, 0.8844,
+0.409375, 0.190625, -0.125, 0.3691, 0.2855, 0.8844,
+-0.35625, 0.1625, -0.09375, -0.3244, 0.4867, 0.8111,
+-0.40625, 0.165625, -0.115625, -0.3244, 0.4867, 0.8111,
+-0.36875, 0.14375, -0.0875, -0.3244, 0.4867, 0.8111,
+0.409375, 0.190625, -0.125, 0.4467, 0.0975, 0.8894,
+0.475, 0.175, -0.15625, 0.4467, 0.0975, 0.8894,
+0.49375, 0.203125, -0.16875, 0.4467, 0.0975, 0.8894,
+-0.475, 0.175, -0.15625, -0.4467, 0.0975, 0.8894,
+-0.409375, 0.190625, -0.125, -0.4467, 0.0975, 0.8894,
+-0.49375, 0.203125, -0.16875, -0.4467, 0.0975, 0.8894,
+0.475, 0.175, -0.15625, 0.3188, 0.1993, 0.9266,
+0.540625, 0.128125, -0.16875, 0.3188, 0.1993, 0.9266,
+0.49375, 0.203125, -0.16875, 0.3188, 0.1993, 0.9266,
+-0.475, 0.175, -0.15625, -0.1817, -0.0079, 0.9833,
+-0.540625, 0.128125, -0.16875, -0.1817, -0.0079, 0.9833,
+-0.50625, 0.115625, -0.1625, -0.1817, -0.0079, 0.9833,
+0.50625, 0.115625, -0.1625, 0.2076, -0.0836, 0.9746,
+0.5125, 0.021875, -0.171875, 0.2076, -0.0836, 0.9746,
+0.540625, 0.128125, -0.16875, 0.2076, -0.0836, 0.9746,
+-0.50625, 0.115625, -0.1625, -0.2925, -0.0758, 0.9533,
+-0.5125, 0.021875, -0.171875, -0.2925, -0.0758, 0.9533,
+-0.484375, 0.03125, -0.1625, -0.2925, -0.0758, 0.9533,
+0.484375, 0.03125, -0.1625, 0.3398, 0.0824, 0.9369,
+0.415625, -0.040625, -0.13125, 0.3398, 0.0824, 0.9369,
+0.5125, 0.021875, -0.171875, 0.3398, 0.0824, 0.9369,
+-0.484375, 0.03125, -0.1625, -0.5847, -0.2198, 0.7809,
+-0.415625, -0.040625, -0.13125, -0.5847, -0.2198, 0.7809,
+-0.4125, -0.015625, -0.121875, -0.5847, -0.2198, 0.7809,
+0.415625, -0.040625, -0.13125, 0.5957, -0.385, 0.7049,
+0.33125, -0.028125, -0.053125, 0.5957, -0.385, 0.7049,
+0.309375, -0.05625, -0.05, 0.5957, -0.385, 0.7049,
+-0.33125, -0.028125, -0.053125, -0.5957, -0.385, 0.7049,
+-0.415625, -0.040625, -0.13125, -0.5957, -0.385, 0.7049,
+-0.309375, -0.05625, -0.05, -0.5957, -0.385, 0.7049,
+0.4125, -0.015625, -0.121875, 0.4843, 0.558, 0.6738,
+0.353125, -0.009375, -0.084375, 0.4843, 0.558, 0.6738,
+0.33125, -0.028125, -0.053125, 0.4843, 0.558, 0.6738,
+-0.353125, -0.009375, -0.084375, -0.4843, 0.558, 0.6738,
+-0.4125, -0.015625, -0.121875, -0.4843, 0.558, 0.6738,
+-0.33125, -0.028125, -0.053125, -0.4843, 0.558, 0.6738,
+0.484375, 0.03125, -0.1625, -0.2675, 0.8318, 0.4864,
+0.415625, 0, -0.146875, -0.2675, 0.8318, 0.4864,
+0.4125, -0.015625, -0.121875, -0.2675, 0.8318, 0.4864,
+-0.415625, 0, -0.146875, 0.2675, 0.8318, 0.4864,
+-0.484375, 0.03125, -0.1625, 0.2675, 0.8318, 0.4864,
+-0.4125, -0.015625, -0.121875, 0.2675, 0.8318, 0.4864,
+0.49375, 0.1, -0.178125, -0.8576, 0.2223, 0.4637,
+0.484375, 0.03125, -0.1625, -0.8576, 0.2223, 0.4637,
+0.50625, 0.115625, -0.1625, -0.8576, 0.2223, 0.4637,
+-0.49375, 0.1, -0.178125, 0.7885, 0.2366, 0.5677,
+-0.484375, 0.03125, -0.1625, 0.7885, 0.2366, 0.5677,
+-0.475, 0.0375, -0.178125, 0.7885, 0.2366, 0.5677,
+0.46875, 0.14375, -0.175, -0.5257, -0.3579, 0.7717,
+0.50625, 0.115625, -0.1625, -0.5257, -0.3579, 0.7717,
+0.475, 0.175, -0.15625, -0.5257, -0.3579, 0.7717,
+-0.46875, 0.14375, -0.175, 0.5242, -0.3548, 0.7742,
+-0.50625, 0.115625, -0.1625, 0.5242, -0.3548, 0.7742,
+-0.49375, 0.1, -0.178125, 0.5242, -0.3548, 0.7742,
+0.409375, 0.1375, -0.14375, 0.4663, -0.5991, 0.6509,
+0.475, 0.175, -0.15625, 0.4663, -0.5991, 0.6509,
+0.40625, 0.165625, -0.115625, 0.4663, -0.5991, 0.6509,
+-0.409375, 0.1375, -0.14375, -0.439, -0.5252, 0.729,
+-0.475, 0.175, -0.15625, -0.439, -0.5252, 0.729,
+-0.46875, 0.14375, -0.175, -0.439, -0.5252, 0.729,
+0.40625, 0.165625, -0.115625, 0.7104, -0.4567, 0.5356,
+0.378125, 0.121875, -0.115625, 0.7104, -0.4567, 0.5356,
+0.409375, 0.1375, -0.14375, 0.7104, -0.4567, 0.5356,
+-0.378125, 0.121875, -0.115625, -0.7104, -0.4567, 0.5356,
+-0.40625, 0.165625, -0.115625, -0.7104, -0.4567, 0.5356,
+-0.409375, 0.1375, -0.14375, -0.7104, -0.4567, 0.5356,
+0.2375, -0.05, -0.065625, 0.7507, -0.6131, -0.2461,
+0.290625, 0, -0.028125, 0.7507, -0.6131, -0.2461,
+0.29375, -0.01875, 0.028125, 0.7507, -0.6131, -0.2461,
+-0.2375, -0.05, -0.065625, -0.6302, -0.7658, 0.1282,
+-0.290625, 0, -0.028125, -0.6302, -0.7658, 0.1282,
+-0.2875, -0.009375, -0.06875, -0.6302, -0.7658, 0.1282,
+0.309375, -0.05625, -0.05, -0.1788, 0.2923, 0.9395,
+0.2875, -0.009375, -0.06875, -0.1788, 0.2923, 0.9395,
+0.2375, -0.05, -0.065625, -0.1788, 0.2923, 0.9395,
+-0.309375, -0.05625, -0.05, 0.2175, 0.2733, 0.937,
+-0.2875, -0.009375, -0.06875, 0.2175, 0.2733, 0.937,
+-0.33125, -0.028125, -0.053125, 0.2175, 0.2733, 0.937,
+0.340625, 0.09375, 0.021875, 0.9042, -0.3578, -0.2332,
+0.290625, 0, -0.028125, 0.9042, -0.3578, -0.2332,
+0.34375, 0.128125, -0.01875, 0.9042, -0.3578, -0.2332,
+-0.290625, 0, -0.028125, -0.9042, -0.3578, -0.2332,
+-0.340625, 0.09375, 0.021875, -0.9042, -0.3578, -0.2332,
+-0.34375, 0.128125, -0.01875, -0.9042, -0.3578, -0.2332,
+0.328125, 0.13125, -0.08125, 0.04, 0.3399, 0.9396,
+0.36875, 0.14375, -0.0875, 0.04, 0.3399, 0.9396,
+0.35625, 0.1625, -0.09375, 0.04, 0.3399, 0.9396,
+-0.36875, 0.14375, -0.0875, -0.04, 0.3399, 0.9396,
+-0.328125, 0.13125, -0.08125, -0.04, 0.3399, 0.9396,
+-0.35625, 0.1625, -0.09375, -0.04, 0.3399, 0.9396,
+0.33125, -0.028125, -0.053125, 0.2734, 0.9064, 0.3221,
+0.325, -0.00625, -0.109375, 0.2734, 0.9064, 0.3221,
+0.2875, -0.009375, -0.06875, 0.2734, 0.9064, 0.3221,
+-0.325, -0.00625, -0.109375, -0.2734, 0.9064, 0.3221,
+-0.33125, -0.028125, -0.053125, -0.2734, 0.9064, 0.3221,
+-0.2875, -0.009375, -0.06875, -0.2734, 0.9064, 0.3221,
+0.2875, 0.015625, -0.075, 0.448, -0.448, 0.7737,
+0.325, -0.00625, -0.109375, 0.448, -0.448, 0.7737,
+0.3375, 0.00625, -0.109375, 0.448, -0.448, 0.7737,
+-0.2875, 0.015625, -0.075, -0.7177, 0.1689, 0.6755,
+-0.325, -0.00625, -0.109375, -0.7177, 0.1689, 0.6755,
+-0.2875, -0.009375, -0.06875, -0.7177, 0.1689, 0.6755,
+0.303125, 0.0375, -0.109375, 0, 0, 1,
+0.3375, 0.00625, -0.109375, 0, 0, 1,
+0.328125, 0.034375, -0.109375, 0, 0, 1,
+-0.3375, 0.00625, -0.109375, 0, 0, 1,
+-0.303125, 0.0375, -0.109375, 0, 0, 1,
+-0.328125, 0.034375, -0.109375, 0, 0, 1,
+0.31875, 0.08125, -0.084375, 0.5534, -0.5534, 0.6225,
+0.303125, 0.0375, -0.109375, 0.5534, -0.5534, 0.6225,
+0.334375, 0.06875, -0.109375, 0.5534, -0.5534, 0.6225,
+-0.31875, 0.08125, -0.084375, -0.9008, -0.4075, 0.1501,
+-0.303125, 0.0375, -0.109375, -0.9008, -0.4075, 0.1501,
+-0.2875, 0.015625, -0.075, -0.9008, -0.4075, 0.1501,
+0.31875, 0.08125, -0.084375, 0.5724, -0.3122, 0.7582,
+0.35625, 0.096875, -0.10625, 0.5724, -0.3122, 0.7582,
+0.3375, 0.115625, -0.084375, 0.5724, -0.3122, 0.7582,
+-0.31875, 0.08125, -0.084375, -0.5815, -0.5217, 0.6243,
+-0.35625, 0.096875, -0.10625, -0.5815, -0.5217, 0.6243,
+-0.334375, 0.06875, -0.109375, -0.5815, -0.5217, 0.6243,
+0.3375, 0.115625, -0.084375, 0.5597, -0.5533, 0.6169,
+0.378125, 0.121875, -0.115625, 0.5597, -0.5533, 0.6169,
+0.36875, 0.14375, -0.0875, 0.5597, -0.5533, 0.6169,
+-0.3375, 0.115625, -0.084375, -0.6138, -0.2571, 0.7465,
+-0.378125, 0.121875, -0.115625, -0.6138, -0.2571, 0.7465,
+-0.35625, 0.096875, -0.10625, -0.6138, -0.2571, 0.7465,
+0.34375, 0.128125, -0.01875, 0.8271, 0.5323, -0.1802,
+0.3375, 0.115625, -0.084375, 0.8271, 0.5323, -0.1802,
+0.328125, 0.13125, -0.08125, 0.8271, 0.5323, -0.1802,
+-0.3375, 0.115625, -0.084375, -0.8271, 0.5323, -0.1802,
+-0.34375, 0.128125, -0.01875, -0.8271, 0.5323, -0.1802,
+-0.328125, 0.13125, -0.08125, -0.8271, 0.5323, -0.1802,
+0.290625, 0, -0.028125, 0.9227, -0.3765, -0.0825,
+0.31875, 0.08125, -0.084375, 0.9227, -0.3765, -0.0825,
+0.34375, 0.128125, -0.01875, 0.9227, -0.3765, -0.0825,
+-0.290625, 0, -0.028125, -0.8717, -0.4446, -0.2063,
+-0.31875, 0.08125, -0.084375, -0.8717, -0.4446, -0.2063,
+-0.2875, 0.015625, -0.075, -0.8717, -0.4446, -0.2063,
+0.290625, 0, -0.028125, 0.9972, -0.0181, -0.0725,
+0.2875, -0.009375, -0.06875, 0.9972, -0.0181, -0.0725,
+0.2875, 0.015625, -0.075, 0.9972, -0.0181, -0.0725,
+-0.2875, 0.015625, -0.075, -0.9972, -0.0181, -0.0725,
+-0.2875, -0.009375, -0.06875, -0.9972, -0.0181, -0.0725,
+-0.290625, 0, -0.028125, -0.9972, -0.0181, -0.0725,
+0.378125, 0.121875, -0.115625, 0.6895, -0.6644, 0.2883,
+0.35625, 0.09375, -0.128125, 0.6895, -0.6644, 0.2883,
+0.38125, 0.115625, -0.1375, 0.6895, -0.6644, 0.2883,
+-0.35625, 0.09375, -0.128125, -0.6895, -0.6644, 0.2883,
+-0.378125, 0.121875, -0.115625, -0.6895, -0.6644, 0.2883,
+-0.38125, 0.115625, -0.1375, -0.6895, -0.6644, 0.2883,
+0.334375, 0.06875, -0.109375, 0.7815, -0.6176, 0.0882,
+0.35625, 0.09375, -0.128125, 0.7815, -0.6176, 0.0882,
+0.35625, 0.096875, -0.10625, 0.7815, -0.6176, 0.0882,
+-0.334375, 0.06875, -0.109375, -0.793, -0.5947, 0.1322,
+-0.35625, 0.09375, -0.128125, -0.793, -0.5947, 0.1322,
+-0.3375, 0.06875, -0.128125, -0.793, -0.5947, 0.1322,
+0.334375, 0.06875, -0.109375, 0.7022, -0.7022, 0.117,
+0.30625, 0.0375, -0.128125, 0.7022, -0.7022, 0.117,
+0.3375, 0.06875, -0.128125, 0.7022, -0.7022, 0.117,
+-0.30625, 0.0375, -0.128125, -0.7022, -0.7022, 0.117,
+-0.334375, 0.06875, -0.109375, -0.7022, -0.7022, 0.117,
+-0.3375, 0.06875, -0.128125, -0.7022, -0.7022, 0.117,
+0.328125, 0.034375, -0.109375, 0.124, 0.9921, 0.0207,
+0.30625, 0.0375, -0.128125, 0.124, 0.9921, 0.0207,
+0.303125, 0.0375, -0.109375, 0.124, 0.9921, 0.0207,
+-0.328125, 0.034375, -0.109375, -0.2408, 0.9631, -0.1204,
+-0.30625, 0.0375, -0.128125, -0.2408, 0.9631, -0.1204,
+-0.33125, 0.03125, -0.128125, -0.2408, 0.9631, -0.1204,
+0.3375, 0.00625, -0.109375, 0.9435, 0.3145, 0.1048,
+0.33125, 0.03125, -0.128125, 0.9435, 0.3145, 0.1048,
+0.328125, 0.034375, -0.109375, 0.9435, 0.3145, 0.1048,
+-0.3375, 0.00625, -0.109375, -0.9251, 0.3469, 0.1542,
+-0.33125, 0.03125, -0.128125, -0.9251, 0.3469, 0.1542,
+-0.340625, 0.00625, -0.128125, -0.9251, 0.3469, 0.1542,
+0.3375, 0.00625, -0.109375, 0.6213, -0.7767, 0.1036,
+0.325, -0.00625, -0.128125, 0.6213, -0.7767, 0.1036,
+0.340625, 0.00625, -0.128125, 0.6213, -0.7767, 0.1036,
+-0.325, -0.00625, -0.128125, -0.6213, -0.7767, 0.1036,
+-0.3375, 0.00625, -0.109375, -0.6213, -0.7767, 0.1036,
+-0.340625, 0.00625, -0.128125, -0.6213, -0.7767, 0.1036,
+0.325, -0.00625, -0.109375, 0, 1, 0,
+0.353125, -0.00625, -0.10625, 0, 1, 0,
+0.325, -0.00625, -0.128125, 0, 1, 0,
+-0.353125, -0.00625, -0.10625, 0, 1, 0,
+-0.325, -0.00625, -0.109375, 0, 1, 0,
+-0.325, -0.00625, -0.128125, 0, 1, 0,
+0.409375, 0.1375, -0.14375, 0.6197, -0.6899, 0.3742,
+0.38125, 0.115625, -0.1375, 0.6197, -0.6899, 0.3742,
+0.415625, 0.13125, -0.165625, 0.6197, -0.6899, 0.3742,
+-0.38125, 0.115625, -0.1375, -0.6197, -0.6899, 0.3742,
+-0.409375, 0.1375, -0.14375, -0.6197, -0.6899, 0.3742,
+-0.415625, 0.13125, -0.165625, -0.6197, -0.6899, 0.3742,
+0.46875, 0.14375, -0.175, 0.2752, -0.8808, 0.3853,
+0.415625, 0.13125, -0.165625, 0.2752, -0.8808, 0.3853,
+0.475, 0.1375, -0.19375, 0.2752, -0.8808, 0.3853,
+-0.415625, 0.13125, -0.165625, -0.2752, -0.8808, 0.3853,
+-0.46875, 0.14375, -0.175, -0.2752, -0.8808, 0.3853,
+-0.475, 0.1375, -0.19375, -0.2752, -0.8808, 0.3853,
+0.49375, 0.1, -0.178125, -0.7929, -0.5252, -0.3089,
+0.475, 0.1375, -0.19375, -0.7929, -0.5252, -0.3089,
+0.503125, 0.096875, -0.196875, -0.7929, -0.5252, -0.3089,
+-0.475, 0.1375, -0.19375, 0.7929, -0.5252, -0.3089,
+-0.49375, 0.1, -0.178125, 0.7929, -0.5252, -0.3089,
+-0.503125, 0.096875, -0.196875, 0.7929, -0.5252, -0.3089,
+0.49375, 0.1, -0.178125, -0.8096, 0.2429, -0.5343,
+0.484375, 0.034375, -0.19375, -0.8096, 0.2429, -0.5343,
+0.475, 0.0375, -0.178125, -0.8096, 0.2429, -0.5343,
+-0.49375, 0.1, -0.178125, 0.8538, 0.2328, -0.4657,
+-0.484375, 0.034375, -0.19375, 0.8538, 0.2328, -0.4657,
+-0.503125, 0.096875, -0.196875, 0.8538, 0.2328, -0.4657,
+0.475, 0.0375, -0.178125, -0.5621, 0.8231, -0.0803,
+0.41875, 0, -0.16875, -0.5621, 0.8231, -0.0803,
+0.415625, 0, -0.146875, -0.5621, 0.8231, -0.0803,
+-0.475, 0.0375, -0.178125, 0.5433, 0.6985, -0.4657,
+-0.41875, 0, -0.16875, 0.5433, 0.6985, -0.4657,
+-0.484375, 0.034375, -0.19375, 0.5433, 0.6985, -0.4657,
+0.415625, 0, -0.146875, -0.0071, 0.9899, 0.1414,
+0.353125, -0.00625, -0.10625, -0.0071, 0.9899, 0.1414,
+0.353125, -0.009375, -0.084375, -0.0071, 0.9899, 0.1414,
+-0.415625, 0, -0.146875, 0.1096, 0.9939, -0.0157,
+-0.353125, -0.00625, -0.10625, 0.1096, 0.9939, -0.0157,
+-0.41875, 0, -0.16875, 0.1096, 0.9939, -0.0157,
+0.340625, 0.00625, -0.128125, 0.1046, 0.0392, 0.9937,
+0.35625, 0.04375, -0.13125, 0.1046, 0.0392, 0.9937,
+0.33125, 0.03125, -0.128125, 0.1046, 0.0392, 0.9937,
+-0.340625, 0.00625, -0.128125, -0.1738, 0.0097, 0.9847,
+-0.35625, 0.04375, -0.13125, -0.1738, 0.0097, 0.9847,
+-0.375, 0.025, -0.134375, -0.1738, 0.0097, 0.9847,
+0.375, 0.025, -0.134375, 0.2461, 0.0852, 0.9655,
+0.384375, 0.06875, -0.140625, 0.2461, 0.0852, 0.9655,
+0.35625, 0.04375, -0.13125, 0.2461, 0.0852, 0.9655,
+-0.375, 0.025, -0.134375, -0.4134, 0.0413, 0.9096,
+-0.384375, 0.06875, -0.140625, -0.4134, 0.0413, 0.9096,
+-0.4, 0.05, -0.146875, -0.4134, 0.0413, 0.9096,
+0.384375, 0.06875, -0.140625, 0.3009, 0.0926, 0.9491,
+0.421875, 0.075, -0.153125, 0.3009, 0.0926, 0.9491,
+0.40625, 0.09375, -0.15, 0.3009, 0.0926, 0.9491,
+-0.421875, 0.075, -0.153125, -0.3009, 0.0926, 0.9491,
+-0.384375, 0.06875, -0.140625, -0.3009, 0.0926, 0.9491,
+-0.40625, 0.09375, -0.15, -0.3009, 0.0926, 0.9491,
+0.421875, 0.075, -0.153125, 0.2104, 0.0124, 0.9775,
+0.434375, 0.109375, -0.15625, 0.2104, 0.0124, 0.9775,
+0.40625, 0.09375, -0.15, 0.2104, 0.0124, 0.9775,
+-0.421875, 0.075, -0.153125, -0.122, 0.0458, 0.9915,
+-0.434375, 0.109375, -0.15625, -0.122, 0.0458, 0.9915,
+-0.44375, 0.084375, -0.15625, -0.122, 0.0458, 0.9915,
+0.415625, 0.13125, -0.165625, -0.0099, 0.3867, 0.9221,
+0.40625, 0.09375, -0.15, -0.0099, 0.3867, 0.9221,
+0.434375, 0.109375, -0.15625, -0.0099, 0.3867, 0.9221,
+-0.40625, 0.09375, -0.15, 0.0099, 0.3867, 0.9221,
+-0.415625, 0.13125, -0.165625, 0.0099, 0.3867, 0.9221,
+-0.434375, 0.109375, -0.15625, 0.0099, 0.3867, 0.9221,
+0.384375, 0.06875, -0.140625, 0.3787, -0.0364, 0.9248,
+0.38125, 0.115625, -0.1375, 0.3787, -0.0364, 0.9248,
+0.35625, 0.09375, -0.128125, 0.3787, -0.0364, 0.9248,
+-0.384375, 0.06875, -0.140625, -0.4244, -0.032, 0.9049,
+-0.38125, 0.115625, -0.1375, -0.4244, -0.032, 0.9049,
+-0.40625, 0.09375, -0.15, -0.4244, -0.032, 0.9049,
+0.3375, 0.06875, -0.128125, 0.253, -0.1897, 0.9487,
+0.384375, 0.06875, -0.140625, 0.253, -0.1897, 0.9487,
+0.35625, 0.09375, -0.128125, 0.253, -0.1897, 0.9487,
+-0.3375, 0.06875, -0.128125, -0.257, 0.0723, 0.9637,
+-0.384375, 0.06875, -0.140625, -0.257, 0.0723, 0.9637,
+-0.35625, 0.04375, -0.13125, -0.257, 0.0723, 0.9637,
+0.33125, 0.03125, -0.128125, 0, 0, 1,
+0.3375, 0.06875, -0.128125, 0, 0, 1,
+0.30625, 0.0375, -0.128125, 0, 0, 1,
+-0.3375, 0.06875, -0.128125, 0, 0, 1,
+-0.33125, 0.03125, -0.128125, 0, 0, 1,
+-0.30625, 0.0375, -0.128125, 0, 0, 1,
+0.353125, -0.00625, -0.10625, -0.487, 0.6088, 0.6262,
+0.340625, 0.00625, -0.128125, -0.487, 0.6088, 0.6262,
+0.325, -0.00625, -0.128125, -0.487, 0.6088, 0.6262,
+-0.353125, -0.00625, -0.10625, 0.2981, 0.7454, 0.5963,
+-0.340625, 0.00625, -0.128125, 0.2981, 0.7454, 0.5963,
+-0.375, 0.025, -0.134375, 0.2981, 0.7454, 0.5963,
+0.41875, 0, -0.16875, 0.6693, 0.1802, 0.7208,
+0.375, 0.025, -0.134375, 0.6693, 0.1802, 0.7208,
+0.353125, -0.00625, -0.10625, 0.6693, 0.1802, 0.7208,
+-0.375, 0.025, -0.134375, -0.6693, 0.1802, 0.7208,
+-0.41875, 0, -0.16875, -0.6693, 0.1802, 0.7208,
+-0.353125, -0.00625, -0.10625, -0.6693, 0.1802, 0.7208,
+0.421875, 0.075, -0.153125, 0.4388, -0.2008, 0.8759,
+0.41875, 0, -0.16875, 0.4388, -0.2008, 0.8759,
+0.484375, 0.034375, -0.19375, 0.4388, -0.2008, 0.8759,
+-0.421875, 0.075, -0.153125, -0.4723, -0.1986, 0.8588,
+-0.41875, 0, -0.16875, -0.4723, -0.1986, 0.8588,
+-0.4, 0.05, -0.146875, -0.4723, -0.1986, 0.8588,
+0.44375, 0.084375, -0.15625, 0.5786, -0.1334, 0.8046,
+0.484375, 0.034375, -0.19375, 0.5786, -0.1334, 0.8046,
+0.503125, 0.096875, -0.196875, 0.5786, -0.1334, 0.8046,
+-0.44375, 0.084375, -0.15625, -0.2975, -0.4062, 0.864,
+-0.484375, 0.034375, -0.19375, -0.2975, -0.4062, 0.864,
+-0.421875, 0.075, -0.153125, -0.2975, -0.4062, 0.864,
+0.475, 0.1375, -0.19375, 0.5002, 0.2833, 0.8182,
+0.44375, 0.084375, -0.15625, 0.5002, 0.2833, 0.8182,
+0.503125, 0.096875, -0.196875, 0.5002, 0.2833, 0.8182,
+-0.44375, 0.084375, -0.15625, -0.5002, 0.2833, 0.8182,
+-0.475, 0.1375, -0.19375, -0.5002, 0.2833, 0.8182,
+-0.503125, 0.096875, -0.196875, -0.5002, 0.2833, 0.8182,
+0.415625, 0.13125, -0.165625, 0.298, 0.5802, 0.758,
+0.434375, 0.109375, -0.15625, 0.298, 0.5802, 0.758,
+0.475, 0.1375, -0.19375, 0.298, 0.5802, 0.758,
+-0.475, 0.1375, -0.19375, -0.298, 0.5802, 0.758,
+-0.434375, 0.109375, -0.15625, -0.298, 0.5802, 0.758,
+-0.415625, 0.13125, -0.165625, -0.298, 0.5802, 0.758,
+0.415625, -0.040625, -0.13125, 0.0929, -0.9912, -0.0944,
+0.315625, -0.05, -0.13125, 0.0929, -0.9912, -0.0944,
+0.415625, -0.034375, -0.196875, 0.0929, -0.9912, -0.0944,
+-0.315625, -0.05, -0.13125, -0.0929, -0.9912, -0.0944,
+-0.415625, -0.040625, -0.13125, -0.0929, -0.9912, -0.0944,
+-0.415625, -0.034375, -0.196875, -0.0929, -0.9912, -0.0944,
+0.5125, 0.021875, -0.171875, 0.4688, -0.8715, 0.1442,
+0.415625, -0.034375, -0.196875, 0.4688, -0.8715, 0.1442,
+0.525, 0.021875, -0.2125, 0.4688, -0.8715, 0.1442,
+-0.415625, -0.034375, -0.196875, -0.4688, -0.8715, 0.1442,
+-0.5125, 0.021875, -0.171875, -0.4688, -0.8715, 0.1442,
+-0.525, 0.021875, -0.2125, -0.4688, -0.8715, 0.1442,
+0.5125, 0.021875, -0.171875, 0.9309, -0.2541, 0.2624,
+0.546875, 0.11875, -0.2, 0.9309, -0.2541, 0.2624,
+0.540625, 0.128125, -0.16875, 0.9309, -0.2541, 0.2624,
+-0.5125, 0.021875, -0.171875, -0.9264, -0.246, 0.2851,
+-0.546875, 0.11875, -0.2, -0.9264, -0.246, 0.2851,
+-0.525, 0.021875, -0.2125, -0.9264, -0.246, 0.2851,
+0.540625, 0.128125, -0.16875, 0.8465, 0.5291, -0.0595,
+0.5, 0.1875, -0.21875, 0.8465, 0.5291, -0.0595,
+0.49375, 0.203125, -0.16875, 0.8465, 0.5291, -0.0595,
+-0.540625, 0.128125, -0.16875, -0.8267, 0.5627, -0.0035,
+-0.5, 0.1875, -0.21875, -0.8267, 0.5627, -0.0035,
+-0.546875, 0.11875, -0.2, -0.8267, 0.5627, -0.0035,
+0.49375, 0.203125, -0.16875, -0.2511, 0.9439, -0.2145,
+0.409375, 0.175, -0.19375, -0.2511, 0.9439, -0.2145,
+0.409375, 0.190625, -0.125, -0.2511, 0.9439, -0.2145,
+-0.49375, 0.203125, -0.16875, 0.2146, 0.9243, -0.3157,
+-0.409375, 0.175, -0.19375, 0.2146, 0.9243, -0.3157,
+-0.5, 0.1875, -0.21875, 0.2146, 0.9243, -0.3157,
+0.409375, 0.190625, -0.125, -0.4841, 0.8743, -0.0361,
+0.34375, 0.153125, -0.153125, -0.4841, 0.8743, -0.0361,
+0.35625, 0.1625, -0.09375, -0.4841, 0.8743, -0.0361,
+-0.409375, 0.190625, -0.125, 0.4196, 0.8851, -0.2012,
+-0.34375, 0.153125, -0.153125, 0.4196, 0.8851, -0.2012,
+-0.409375, 0.175, -0.19375, 0.4196, 0.8851, -0.2012,
+0.415625, -0.034375, -0.196875, -0.5256, -0.003, -0.8507,
+0.34375, 0.153125, -0.153125, -0.5256, -0.003, -0.8507,
+0.409375, 0.175, -0.19375, -0.5256, -0.003, -0.8507,
+-0.415625, -0.034375, -0.196875, 0.547, -0.0144, -0.837,
+-0.34375, 0.153125, -0.153125, 0.547, -0.0144, -0.837,
+-0.315625, -0.05, -0.13125, 0.547, -0.0144, -0.837,
+0.409375, 0.175, -0.19375, -0.1466, 0.0104, -0.9891,
+0.525, 0.021875, -0.2125, -0.1466, 0.0104, -0.9891,
+0.415625, -0.034375, -0.196875, -0.1466, 0.0104, -0.9891,
+-0.525, 0.021875, -0.2125, 0.1466, 0.0104, -0.9891,
+-0.409375, 0.175, -0.19375, 0.1466, 0.0104, -0.9891,
+-0.415625, -0.034375, -0.196875, 0.1466, 0.0104, -0.9891,
+0.5, 0.1875, -0.21875, 0.4046, 0.0266, -0.9141,
+0.546875, 0.11875, -0.2, 0.4046, 0.0266, -0.9141,
+0.525, 0.021875, -0.2125, 0.4046, 0.0266, -0.9141,
+-0.525, 0.021875, -0.2125, -0.4046, 0.0266, -0.9141,
+-0.546875, 0.11875, -0.2, -0.4046, 0.0266, -0.9141,
+-0.5, 0.1875, -0.21875, -0.4046, 0.0266, -0.9141,
+0.328125, 0.13125, -0.08125, -0.8073, 0.5901, 0.0041,
+0.34375, 0.153125, -0.153125, -0.8073, 0.5901, 0.0041,
+0.309375, 0.10625, -0.175, -0.8073, 0.5901, 0.0041,
+-0.328125, 0.13125, -0.08125, 0.733, 0.6786, 0.0472,
+-0.34375, 0.153125, -0.153125, 0.733, 0.6786, 0.0472,
+-0.35625, 0.1625, -0.09375, 0.733, 0.6786, 0.0472,
+0.309375, 0.10625, -0.175, 0.42, -0.2291, -0.8781,
+0.315625, -0.05, -0.13125, 0.42, -0.2291, -0.8781,
+0.25625, -0.003125, -0.171875, 0.42, -0.2291, -0.8781,
+-0.315625, -0.05, -0.13125, -0.42, -0.2291, -0.8781,
+-0.309375, 0.10625, -0.175, -0.42, -0.2291, -0.8781,
+-0.25625, -0.003125, -0.171875, -0.42, -0.2291, -0.8781,
+0.2375, -0.05, -0.065625, -0.0687, -0.9943, -0.0818,
+0.315625, -0.05, -0.13125, -0.0687, -0.9943, -0.0818,
+0.309375, -0.05625, -0.05, -0.0687, -0.9943, -0.0818,
+-0.315625, -0.05, -0.13125, 0.0687, -0.9943, -0.0818,
+-0.2375, -0.05, -0.065625, 0.0687, -0.9943, -0.0818,
+-0.309375, -0.05625, -0.05, 0.0687, -0.9943, -0.0818,
+0.1875, 0.096875, 0.303125, 0.6713, -0.1971, 0.7145,
+0.175, 0.065625, 0.30625, 0.6713, -0.1971, 0.7145,
+0.2, 0.0375, 0.275, 0.6713, -0.1971, 0.7145,
+-0.2, 0.0375, 0.275, -0.6713, -0.1971, 0.7145,
+-0.175, 0.065625, 0.30625, -0.6713, -0.1971, 0.7145,
+-0.1875, 0.096875, 0.303125, -0.6713, -0.1971, 0.7145,
+0.225, 0.096875, 0.26875, 0.8326, -0.3017, 0.4646,
+0.2, 0.0375, 0.275, 0.8326, -0.3017, 0.4646,
+0.21875, 0.021875, 0.23125, 0.8326, -0.3017, 0.4646,
+-0.21875, 0.021875, 0.23125, -0.8326, -0.3017, 0.4646,
+-0.2, 0.0375, 0.275, -0.8326, -0.3017, 0.4646,
+-0.225, 0.096875, 0.26875, -0.8326, -0.3017, 0.4646,
+0.2, 0.0375, 0.275, 0.4258, -0.7967, 0.429,
+0.140625, 0.0125, 0.2875, 0.4258, -0.7967, 0.429,
+0.140625, -0.009375, 0.246875, 0.4258, -0.7967, 0.429,
+-0.140625, -0.009375, 0.246875, -0.4258, -0.7967, 0.429,
+-0.140625, 0.0125, 0.2875, -0.4258, -0.7967, 0.429,
+-0.2, 0.0375, 0.275, -0.4258, -0.7967, 0.429,
+0.175, 0.065625, 0.30625, 0.3265, -0.4954, 0.805,
+0.140625, 0.053125, 0.3125, 0.3265, -0.4954, 0.805,
+0.140625, 0.0125, 0.2875, 0.3265, -0.4954, 0.805,
+-0.140625, 0.0125, 0.2875, -0.3265, -0.4954, 0.805,
+-0.140625, 0.053125, 0.3125, -0.3265, -0.4954, 0.805,
+-0.175, 0.065625, 0.30625, -0.3265, -0.4954, 0.805,
+0.140625, 0.053125, 0.3125, -0.0649, -0.5714, 0.8181,
+0.109375, 0.065625, 0.31875, -0.0649, -0.5714, 0.8181,
+0.08125, 0.0375, 0.296875, -0.0649, -0.5714, 0.8181,
+-0.08125, 0.0375, 0.296875, 0.0649, -0.5714, 0.8181,
+-0.109375, 0.065625, 0.31875, 0.0649, -0.5714, 0.8181,
+-0.140625, 0.053125, 0.3125, 0.0649, -0.5714, 0.8181,
+0.140625, 0.0125, 0.2875, -0.2738, -0.8315, 0.4834,
+0.08125, 0.0375, 0.296875, -0.2738, -0.8315, 0.4834,
+0.0625, 0.021875, 0.259375, -0.2738, -0.8315, 0.4834,
+-0.0625, 0.021875, 0.259375, 0.2738, -0.8315, 0.4834,
+-0.08125, 0.0375, 0.296875, 0.2738, -0.8315, 0.4834,
+-0.140625, 0.0125, 0.2875, 0.2738, -0.8315, 0.4834,
+0.05625, 0.096875, 0.296875, -0.7606, -0.34, 0.5531,
+0.03125, 0.096875, 0.2625, -0.7606, -0.34, 0.5531,
+0.0625, 0.021875, 0.259375, -0.7606, -0.34, 0.5531,
+-0.05625, 0.096875, 0.296875, 0.7824, -0.3294, 0.5285,
+-0.08125, 0.0375, 0.296875, 0.7824, -0.3294, 0.5285,
+-0.0625, 0.021875, 0.259375, 0.7824, -0.3294, 0.5285,
+0.109375, 0.065625, 0.31875, -0.4658, -0.1863, 0.8651,
+0.096875, 0.096875, 0.31875, -0.4658, -0.1863, 0.8651,
+0.05625, 0.096875, 0.296875, -0.4658, -0.1863, 0.8651,
+-0.05625, 0.096875, 0.296875, 0.4658, -0.1863, 0.8651,
+-0.096875, 0.096875, 0.31875, 0.4658, -0.1863, 0.8651,
+-0.109375, 0.065625, 0.31875, 0.4658, -0.1863, 0.8651,
+0.096875, 0.096875, 0.31875, -0.4983, 0.1812, 0.8478,
+0.109375, 0.13125, 0.31875, -0.4983, 0.1812, 0.8478,
+0.08125, 0.15625, 0.296875, -0.4983, 0.1812, 0.8478,
+-0.08125, 0.15625, 0.296875, 0.4983, 0.1812, 0.8478,
+-0.109375, 0.13125, 0.31875, 0.4983, 0.1812, 0.8478,
+-0.096875, 0.096875, 0.31875, 0.4983, 0.1812, 0.8478,
+0.08125, 0.15625, 0.296875, -0.7683, 0.3293, 0.5488,
+0.0625, 0.175, 0.259375, -0.7683, 0.3293, 0.5488,
+0.03125, 0.096875, 0.2625, -0.7683, 0.3293, 0.5488,
+-0.08125, 0.15625, 0.296875, 0.7656, 0.3223, 0.5568,
+-0.05625, 0.096875, 0.296875, 0.7656, 0.3223, 0.5568,
+-0.03125, 0.096875, 0.2625, 0.7656, 0.3223, 0.5568,
+0.140625, 0.18125, 0.2875, -0.2487, 0.8249, 0.5076,
+0.140625, 0.20625, 0.246875, -0.2487, 0.8249, 0.5076,
+0.0625, 0.175, 0.259375, -0.2487, 0.8249, 0.5076,
+-0.140625, 0.18125, 0.2875, 0.256, 0.8073, 0.5317,
+-0.08125, 0.15625, 0.296875, 0.256, 0.8073, 0.5317,
+-0.0625, 0.175, 0.259375, 0.256, 0.8073, 0.5317,
+0.140625, 0.14375, 0.3125, -0.1017, 0.5518, 0.8277,
+0.140625, 0.18125, 0.2875, -0.1017, 0.5518, 0.8277,
+0.08125, 0.15625, 0.296875, -0.1017, 0.5518, 0.8277,
+-0.140625, 0.14375, 0.3125, 0.0821, 0.6023, 0.794,
+-0.109375, 0.13125, 0.31875, 0.0821, 0.6023, 0.794,
+-0.08125, 0.15625, 0.296875, 0.0821, 0.6023, 0.794,
+0.175, 0.13125, 0.30625, 0.3861, 0.5446, 0.7445,
+0.2, 0.15625, 0.275, 0.3861, 0.5446, 0.7445,
+0.140625, 0.18125, 0.2875, 0.3861, 0.5446, 0.7445,
+-0.175, 0.13125, 0.30625, -0.3329, 0.5231, 0.7846,
+-0.140625, 0.14375, 0.3125, -0.3329, 0.5231, 0.7846,
+-0.140625, 0.18125, 0.2875, -0.3329, 0.5231, 0.7846,
+0.2, 0.15625, 0.275, 0.4059, 0.7641, 0.5014,
+0.21875, 0.175, 0.23125, 0.4059, 0.7641, 0.5014,
+0.140625, 0.20625, 0.246875, 0.4059, 0.7641, 0.5014,
+-0.2, 0.15625, 0.275, -0.4246, 0.7711, 0.4745,
+-0.140625, 0.18125, 0.2875, -0.4246, 0.7711, 0.4745,
+-0.140625, 0.20625, 0.246875, -0.4246, 0.7711, 0.4745,
+0.225, 0.096875, 0.26875, 0.8299, 0.294, 0.4742,
+0.25, 0.096875, 0.225, 0.8299, 0.294, 0.4742,
+0.21875, 0.175, 0.23125, 0.8299, 0.294, 0.4742,
+-0.225, 0.096875, 0.26875, -0.8251, 0.2968, 0.4808,
+-0.2, 0.15625, 0.275, -0.8251, 0.2968, 0.4808,
+-0.21875, 0.175, 0.23125, -0.8251, 0.2968, 0.4808,
+0.1875, 0.096875, 0.303125, 0.6617, 0.2026, 0.7219,
+0.225, 0.096875, 0.26875, 0.6617, 0.2026, 0.7219,
+0.2, 0.15625, 0.275, 0.6617, 0.2026, 0.7219,
+-0.1875, 0.096875, 0.303125, -0.6888, 0.1868, 0.7005,
+-0.175, 0.13125, 0.30625, -0.6888, 0.1868, 0.7005,
+-0.2, 0.15625, 0.275, -0.6888, 0.1868, 0.7005,
+0.175, 0.13125, 0.30625, 0.7816, 0.3058, -0.5437,
+0.178125, 0.134375, 0.3125, 0.7816, 0.3058, -0.5437,
+0.190625, 0.096875, 0.309375, 0.7816, 0.3058, -0.5437,
+-0.175, 0.13125, 0.30625, -0.84, 0.3436, -0.42,
+-0.1875, 0.096875, 0.303125, -0.84, 0.3436, -0.42,
+-0.190625, 0.096875, 0.309375, -0.84, 0.3436, -0.42,
+0.140625, 0.14375, 0.3125, 0.2037, 0.8146, -0.5431,
+0.140625, 0.15, 0.321875, 0.2037, 0.8146, -0.5431,
+0.178125, 0.134375, 0.3125, 0.2037, 0.8146, -0.5431,
+-0.140625, 0.14375, 0.3125, -0.2074, 0.8296, -0.5185,
+-0.175, 0.13125, 0.30625, -0.2074, 0.8296, -0.5185,
+-0.178125, 0.134375, 0.3125, -0.2074, 0.8296, -0.5185,
+0.109375, 0.13125, 0.31875, -0.4381, 0.7988, -0.4123,
+0.10625, 0.134375, 0.328125, -0.4381, 0.7988, -0.4123,
+0.140625, 0.15, 0.321875, -0.4381, 0.7988, -0.4123,
+-0.109375, 0.13125, 0.31875, 0.4056, 0.7605, -0.507,
+-0.140625, 0.14375, 0.3125, 0.4056, 0.7605, -0.507,
+-0.140625, 0.15, 0.321875, 0.4056, 0.7605, -0.507,
+0.096875, 0.096875, 0.31875, -0.7861, 0.3276, -0.5241,
+0.090625, 0.096875, 0.328125, -0.7861, 0.3276, -0.5241,
+0.10625, 0.134375, 0.328125, -0.7861, 0.3276, -0.5241,
+-0.096875, 0.096875, 0.31875, 0.8642, 0.3143, -0.3928,
+-0.109375, 0.13125, 0.31875, 0.8642, 0.3143, -0.3928,
+-0.10625, 0.134375, 0.328125, 0.8642, 0.3143, -0.3928,
+0.096875, 0.096875, 0.31875, -0.8519, -0.3408, -0.3976,
+0.109375, 0.065625, 0.31875, -0.8519, -0.3408, -0.3976,
+0.10625, 0.0625, 0.328125, -0.8519, -0.3408, -0.3976,
+-0.10625, 0.0625, 0.328125, 0.8519, -0.3408, -0.3976,
+-0.109375, 0.065625, 0.31875, 0.8519, -0.3408, -0.3976,
+-0.096875, 0.096875, 0.31875, 0.8519, -0.3408, -0.3976,
+0.109375, 0.065625, 0.31875, -0.4056, -0.7605, -0.507,
+0.140625, 0.053125, 0.3125, -0.4056, -0.7605, -0.507,
+0.140625, 0.046875, 0.321875, -0.4056, -0.7605, -0.507,
+-0.140625, 0.046875, 0.321875, 0.4056, -0.7605, -0.507,
+-0.140625, 0.053125, 0.3125, 0.4056, -0.7605, -0.507,
+-0.109375, 0.065625, 0.31875, 0.4056, -0.7605, -0.507,
+0.140625, 0.053125, 0.3125, 0.2074, -0.8296, -0.5185,
+0.175, 0.065625, 0.30625, 0.2074, -0.8296, -0.5185,
+0.178125, 0.0625, 0.3125, 0.2074, -0.8296, -0.5185,
+-0.178125, 0.0625, 0.3125, -0.2074, -0.8296, -0.5185,
+-0.175, 0.065625, 0.30625, -0.2074, -0.8296, -0.5185,
+-0.140625, 0.053125, 0.3125, -0.2074, -0.8296, -0.5185,
+0.175, 0.065625, 0.30625, 0.8297, -0.3734, -0.4149,
+0.1875, 0.096875, 0.303125, 0.8297, -0.3734, -0.4149,
+0.190625, 0.096875, 0.309375, 0.8297, -0.3734, -0.4149,
+-0.190625, 0.096875, 0.309375, -0.8297, -0.3734, -0.4149,
+-0.1875, 0.096875, 0.303125, -0.8297, -0.3734, -0.4149,
+-0.175, 0.065625, 0.30625, -0.8297, -0.3734, -0.4149,
+0.065625, -0.371875, 0.253125, 0.1054, -0.8433, 0.527,
+ 0, -0.378125, 0.25625, 0.1054, -0.8433, 0.527,
+ 0, -0.39375, 0.23125, 0.1054, -0.8433, 0.527,
+-0.065625, -0.371875, 0.253125, -0.1367, -0.8748, 0.4648,
+-0.071875, -0.3875, 0.221875, -0.1367, -0.8748, 0.4648,
+ 0, -0.39375, 0.23125, -0.1367, -0.8748, 0.4648,
+0.09375, -0.365625, 0.253125, 0.1916, -0.862, 0.4693,
+0.065625, -0.371875, 0.253125, 0.1916, -0.862, 0.4693,
+0.071875, -0.3875, 0.221875, 0.1916, -0.862, 0.4693,
+-0.09375, -0.365625, 0.253125, -0.2303, -0.8656, 0.4447,
+-0.13125, -0.378125, 0.209375, -0.2303, -0.8656, 0.4447,
+-0.071875, -0.3875, 0.221875, -0.2303, -0.8656, 0.4447,
+0.146875, -0.35625, 0.2125, 0.5959, -0.4256, 0.681,
+0.10625, -0.328125, 0.265625, 0.5959, -0.4256, 0.681,
+0.09375, -0.365625, 0.253125, 0.5959, -0.4256, 0.681,
+-0.09375, -0.365625, 0.253125, -0.5959, -0.4256, 0.681,
+-0.10625, -0.328125, 0.265625, -0.5959, -0.4256, 0.681,
+-0.146875, -0.35625, 0.2125, -0.5959, -0.4256, 0.681,
+0.140625, -0.278125, 0.228125, 0.7563, -0.0299, 0.6535,
+0.1, -0.28125, 0.275, 0.7563, -0.0299, 0.6535,
+0.10625, -0.328125, 0.265625, 0.7563, -0.0299, 0.6535,
+-0.10625, -0.328125, 0.265625, -0.7563, -0.0299, 0.6535,
+-0.1, -0.28125, 0.275, -0.7563, -0.0299, 0.6535,
+-0.140625, -0.278125, 0.228125, -0.7563, -0.0299, 0.6535,
+0.125, -0.175, 0.228125, 0.8069, 0.0689, 0.5866,
+0.084375, -0.178125, 0.284375, 0.8069, 0.0689, 0.5866,
+0.1, -0.28125, 0.275, 0.8069, 0.0689, 0.5866,
+-0.1, -0.28125, 0.275, -0.8069, 0.0689, 0.5866,
+-0.084375, -0.178125, 0.284375, -0.8069, 0.0689, 0.5866,
+-0.125, -0.175, 0.228125, -0.8069, 0.0689, 0.5866,
+0.08125, -0.075, 0.225, 0.2334, -0.7779, 0.5834,
+0.175, -0.05625, 0.2125, 0.2334, -0.7779, 0.5834,
+0.159375, -0.01875, 0.26875, 0.2334, -0.7779, 0.5834,
+-0.159375, -0.01875, 0.26875, -0.2334, -0.7779, 0.5834,
+-0.175, -0.05625, 0.2125, -0.2334, -0.7779, 0.5834,
+-0.08125, -0.075, 0.225, -0.2334, -0.7779, 0.5834,
+0.253125, -0.015625, 0.215625, 0.4177, -0.5751, 0.7034,
+0.246875, 0.021875, 0.25, 0.4177, -0.5751, 0.7034,
+0.159375, -0.01875, 0.26875, 0.4177, -0.5751, 0.7034,
+-0.253125, -0.015625, 0.215625, -0.3557, -0.729, 0.5848,
+-0.175, -0.05625, 0.2125, -0.3557, -0.729, 0.5848,
+-0.159375, -0.01875, 0.26875, -0.3557, -0.729, 0.5848,
+0.253125, -0.015625, 0.215625, 0.6872, -0.4191, 0.5934,
+0.33125, 0.059375, 0.178125, 0.6872, -0.4191, 0.5934,
+0.290625, 0.08125, 0.240625, 0.6872, -0.4191, 0.5934,
+-0.290625, 0.08125, 0.240625, -0.6872, -0.4191, 0.5934,
+-0.33125, 0.059375, 0.178125, -0.6872, -0.4191, 0.5934,
+-0.253125, -0.015625, 0.215625, -0.6872, -0.4191, 0.5934,
+0.34375, 0.171875, 0.2375, 0.5537, -0.2978, 0.7777,
+0.296875, 0.15, 0.2625, 0.5537, -0.2978, 0.7777,
+0.290625, 0.08125, 0.240625, 0.5537, -0.2978, 0.7777,
+-0.34375, 0.171875, 0.2375, -0.7028, -0.3915, 0.5939,
+-0.33125, 0.059375, 0.178125, -0.7028, -0.3915, 0.5939,
+-0.290625, 0.08125, 0.240625, -0.7028, -0.3915, 0.5939,
+0.284375, 0.19375, 0.25, 0.8227, 0.3606, 0.4395,
+0.275, 0.165625, 0.290625, 0.8227, 0.3606, 0.4395,
+0.296875, 0.15, 0.2625, 0.8227, 0.3606, 0.4395,
+-0.284375, 0.19375, 0.25, -0.3127, 0.3425, 0.886,
+-0.34375, 0.171875, 0.2375, -0.3127, 0.3425, 0.886,
+-0.296875, 0.15, 0.2625, -0.3127, 0.3425, 0.886,
+0.196875, 0.240625, 0.275, 0.5041, 0.6448, 0.5745,
+0.175, 0.21875, 0.31875, 0.5041, 0.6448, 0.5745,
+0.275, 0.165625, 0.290625, 0.5041, 0.6448, 0.5745,
+-0.196875, 0.240625, 0.275, -0.5091, 0.6482, 0.5663,
+-0.284375, 0.19375, 0.25, -0.5091, 0.6482, 0.5663,
+-0.275, 0.165625, 0.290625, -0.5091, 0.6482, 0.5663,
+0.196875, 0.240625, 0.275, 0.6155, 0.4924, 0.6155,
+0.128125, 0.303125, 0.29375, 0.6155, 0.4924, 0.6155,
+0.125, 0.25625, 0.334375, 0.6155, 0.4924, 0.6155,
+-0.125, 0.25625, 0.334375, -0.6155, 0.4924, 0.6155,
+-0.128125, 0.303125, 0.29375, -0.6155, 0.4924, 0.6155,
+-0.196875, 0.240625, 0.275, -0.6155, 0.4924, 0.6155,
+0.0625, 0.2875, 0.303125, -0.0371, 0.6685, 0.7428,
+0.08125, 0.246875, 0.340625, -0.0371, 0.6685, 0.7428,
+0.125, 0.25625, 0.334375, -0.0371, 0.6685, 0.7428,
+-0.0625, 0.2875, 0.303125, 0.0486, 0.656, 0.7532,
+-0.128125, 0.303125, 0.29375, 0.0486, 0.656, 0.7532,
+-0.125, 0.25625, 0.334375, 0.0486, 0.656, 0.7532,
+0.025, 0.196875, 0.3, -0.7386, 0.3768, 0.559,
+0.040625, 0.171875, 0.3375, -0.7386, 0.3768, 0.559,
+0.08125, 0.246875, 0.340625, -0.7386, 0.3768, 0.559,
+-0.025, 0.196875, 0.3, 0.7104, 0.2715, 0.6494,
+-0.0625, 0.2875, 0.303125, 0.7104, 0.2715, 0.6494,
+-0.08125, 0.246875, 0.340625, 0.7104, 0.2715, 0.6494,
+ 0, 0.171875, 0.296875, -0.5774, 0.5774, 0.5774,
+ 0, 0.140625, 0.328125, -0.5774, 0.5774, 0.5774,
+0.040625, 0.171875, 0.3375, -0.5774, 0.5774, 0.5774,
+ 0, 0.171875, 0.296875, 0.6013, 0.5262, 0.6013,
+-0.025, 0.196875, 0.3, 0.6013, 0.5262, 0.6013,
+-0.040625, 0.171875, 0.3375, 0.6013, 0.5262, 0.6013,
+0.1, 0.1875, 0.303125, 0.5364, -0.323, 0.7797,
+0.08125, 0.246875, 0.340625, 0.5364, -0.323, 0.7797,
+0.040625, 0.171875, 0.3375, 0.5364, -0.323, 0.7797,
+-0.1, 0.1875, 0.303125, -0.507, -0.6281, 0.5903,
+-0.065625, 0.165625, 0.309375, -0.507, -0.6281, 0.5903,
+-0.040625, 0.171875, 0.3375, -0.507, -0.6281, 0.5903,
+0.1, 0.1875, 0.303125, 0.2181, -0.4685, 0.8561,
+0.13125, 0.190625, 0.296875, 0.2181, -0.4685, 0.8561,
+0.125, 0.25625, 0.334375, 0.2181, -0.4685, 0.8561,
+-0.125, 0.25625, 0.334375, -0.2181, -0.4685, 0.8561,
+-0.13125, 0.190625, 0.296875, -0.2181, -0.4685, 0.8561,
+-0.1, 0.1875, 0.303125, -0.2181, -0.4685, 0.8561,
+0.175, 0.21875, 0.31875, -0.1073, -0.501, 0.8588,
+0.125, 0.25625, 0.334375, -0.1073, -0.501, 0.8588,
+0.13125, 0.190625, 0.296875, -0.1073, -0.501, 0.8588,
+-0.175, 0.21875, 0.31875, 0.0348, -0.5792, 0.8144,
+-0.171875, 0.175, 0.2875, 0.0348, -0.5792, 0.8144,
+-0.13125, 0.190625, 0.296875, 0.0348, -0.5792, 0.8144,
+0.275, 0.165625, 0.290625, -0.077, -0.5759, 0.8139,
+0.175, 0.21875, 0.31875, -0.077, -0.5759, 0.8139,
+0.171875, 0.175, 0.2875, -0.077, -0.5759, 0.8139,
+-0.275, 0.165625, 0.290625, 0.0899, -0.7843, 0.6138,
+-0.240625, 0.15, 0.265625, 0.0899, -0.7843, 0.6138,
+-0.171875, 0.175, 0.2875, 0.0899, -0.7843, 0.6138,
+0.296875, 0.15, 0.2625, 0.0279, -0.8645, 0.5019,
+0.275, 0.165625, 0.290625, 0.0279, -0.8645, 0.5019,
+0.240625, 0.15, 0.265625, 0.0279, -0.8645, 0.5019,
+-0.296875, 0.15, 0.2625, -0.0547, -0.1695, 0.984,
+-0.25625, 0.11875, 0.259375, -0.0547, -0.1695, 0.984,
+-0.240625, 0.15, 0.265625, -0.0547, -0.1695, 0.984,
+0.290625, 0.08125, 0.240625, 0.1687, -0.3128, 0.9347,
+0.296875, 0.15, 0.2625, 0.1687, -0.3128, 0.9347,
+0.25625, 0.11875, 0.259375, 0.1687, -0.3128, 0.9347,
+-0.290625, 0.08125, 0.240625, -0.426, -0.0609, 0.9027,
+-0.25, 0.075, 0.259375, -0.426, -0.0609, 0.9027,
+-0.25625, 0.11875, 0.259375, -0.426, -0.0609, 0.9027,
+0.246875, 0.021875, 0.25, 0.435, -0.1812, 0.882,
+0.290625, 0.08125, 0.240625, 0.435, -0.1812, 0.882,
+0.25, 0.075, 0.259375, 0.435, -0.1812, 0.882,
+-0.246875, 0.021875, 0.25, -0.3352, -0.1828, 0.9243,
+-0.196875, 0.025, 0.26875, -0.3352, -0.1828, 0.9243,
+-0.25, 0.075, 0.259375, -0.3352, -0.1828, 0.9243,
+0.159375, -0.01875, 0.26875, 0.3223, -0.2762, 0.9054,
+0.246875, 0.021875, 0.25, 0.3223, -0.2762, 0.9054,
+0.196875, 0.025, 0.26875, 0.3223, -0.2762, 0.9054,
+-0.159375, -0.01875, 0.26875, -0.3579, -0.3068, 0.8819,
+-0.15, 0.00625, 0.28125, -0.3579, -0.3068, 0.8819,
+-0.196875, 0.025, 0.26875, -0.3579, -0.3068, 0.8819,
+0.05, -0.040625, 0.325, 0.4815, -0.2408, 0.8427,
+0.159375, -0.01875, 0.26875, 0.4815, -0.2408, 0.8427,
+0.15, 0.00625, 0.28125, 0.4815, -0.2408, 0.8427,
+-0.05, -0.040625, 0.325, -0.3069, 0.2113, 0.928,
+-0.08125, 0.0375, 0.296875, -0.3069, 0.2113, 0.928,
+-0.15, 0.00625, 0.28125, -0.3069, 0.2113, 0.928,
+0.08125, 0.0375, 0.296875, -0.0317, -0.1899, 0.9813,
+0.065625, 0.05625, 0.3, -0.0317, -0.1899, 0.9813,
+ 0, 0.01875, 0.290625, -0.0317, -0.1899, 0.9813,
+ 0, 0.01875, 0.290625, 0.0317, -0.1899, 0.9813,
+-0.065625, 0.05625, 0.3, 0.0317, -0.1899, 0.9813,
+-0.08125, 0.0375, 0.296875, 0.0317, -0.1899, 0.9813,
+0.040625, 0.171875, 0.3375, 0.1854, -0.4956, 0.8485,
+ 0, 0.140625, 0.328125, 0.1854, -0.4956, 0.8485,
+0.05, 0.121875, 0.30625, 0.1854, -0.4956, 0.8485,
+-0.040625, 0.171875, 0.3375, -0.6819, -0.2915, 0.6709,
+-0.065625, 0.165625, 0.309375, -0.6819, -0.2915, 0.6709,
+-0.05, 0.121875, 0.30625, -0.6819, -0.2915, 0.6709,
+0.05, 0.121875, 0.30625, 0.2623, -0.3498, 0.8994,
+ 0, 0.140625, 0.328125, 0.2623, -0.3498, 0.8994,
+ 0, 0.084375, 0.30625, 0.2623, -0.3498, 0.8994,
+ 0, 0.084375, 0.30625, -0.2623, -0.3498, 0.8994,
+ 0, 0.140625, 0.328125, -0.2623, -0.3498, 0.8994,
+-0.05, 0.121875, 0.30625, -0.2623, -0.3498, 0.8994,
+0.065625, 0.05625, 0.3, 0.0585, -0.0845, 0.9947,
+0.053125, 0.084375, 0.303125, 0.0585, -0.0845, 0.9947,
+ 0, 0.084375, 0.30625, 0.0585, -0.0845, 0.9947,
+-0.065625, 0.05625, 0.3, 0.0066, -0.2316, 0.9728,
+ 0, 0.01875, 0.290625, 0.0066, -0.2316, 0.9728,
+ 0, 0.084375, 0.30625, 0.0066, -0.2316, 0.9728,
+0.025, -0.353125, 0.278125, -0.0136, -0.6507, 0.7592,
+ 0, -0.35625, 0.275, -0.0136, -0.6507, 0.7592,
+ 0, -0.378125, 0.25625, -0.0136, -0.6507, 0.7592,
+ 0, -0.378125, 0.25625, 0.0136, -0.6507, 0.7592,
+ 0, -0.35625, 0.275, 0.0136, -0.6507, 0.7592,
+-0.025, -0.353125, 0.278125, 0.0136, -0.6507, 0.7592,
+0.046875, -0.334375, 0.284375, 0.2404, -0.5476, 0.8014,
+0.025, -0.353125, 0.278125, 0.2404, -0.5476, 0.8014,
+0.065625, -0.371875, 0.253125, 0.2404, -0.5476, 0.8014,
+-0.065625, -0.371875, 0.253125, -0.2404, -0.5476, 0.8014,
+-0.025, -0.353125, 0.278125, -0.2404, -0.5476, 0.8014,
+-0.046875, -0.334375, 0.284375, -0.2404, -0.5476, 0.8014,
+0.046875, -0.334375, 0.284375, 0.3143, -0.3928, 0.8642,
+0.09375, -0.365625, 0.253125, 0.3143, -0.3928, 0.8642,
+0.10625, -0.328125, 0.265625, 0.3143, -0.3928, 0.8642,
+-0.046875, -0.334375, 0.284375, -0.3128, -0.1662, 0.9352,
+-0.04375, -0.2875, 0.29375, -0.3128, -0.1662, 0.9352,
+-0.10625, -0.328125, 0.265625, -0.3128, -0.1662, 0.9352,
+0.084375, -0.178125, 0.284375, 0.2821, -0.0164, 0.9592,
+0.03125, -0.178125, 0.3, 0.2821, -0.0164, 0.9592,
+0.046875, -0.275, 0.29375, 0.2821, -0.0164, 0.9592,
+-0.046875, -0.275, 0.29375, -0.2821, -0.0164, 0.9592,
+-0.03125, -0.178125, 0.3, -0.2821, -0.0164, 0.9592,
+-0.084375, -0.178125, 0.284375, -0.2821, -0.0164, 0.9592,
+0.04375, -0.2875, 0.29375, 0.3273, -0.1432, 0.934,
+0.10625, -0.328125, 0.265625, 0.3273, -0.1432, 0.934,
+0.1, -0.28125, 0.275, 0.3273, -0.1432, 0.934,
+-0.1, -0.28125, 0.275, -0.3273, -0.1432, 0.934,
+-0.10625, -0.328125, 0.265625, -0.3273, -0.1432, 0.934,
+-0.04375, -0.2875, 0.29375, -0.3273, -0.1432, 0.934,
+ 0, -0.13125, 0.296875, 0, 0.0665, 0.9978,
+ 0, -0.178125, 0.3, 0, 0.0665, 0.9978,
+0.03125, -0.178125, 0.3, 0, 0.0665, 0.9978,
+ 0, -0.13125, 0.296875, 0.0232, 0.0511, 0.9984,
+-0.034375, -0.115625, 0.296875, 0.0232, 0.0511, 0.9984,
+-0.03125, -0.178125, 0.3, 0.0232, 0.0511, 0.9984,
+0.03125, -0.178125, 0.3, 0, -0.0665, 0.9978,
+ 0, -0.178125, 0.3, 0, -0.0665, 0.9978,
+ 0, -0.271875, 0.29375, 0, -0.0665, 0.9978,
+-0.03125, -0.178125, 0.3, 0.0043, -0.0651, 0.9979,
+-0.046875, -0.275, 0.29375, 0.0043, -0.0651, 0.9979,
+ 0, -0.271875, 0.29375, 0.0043, -0.0651, 0.9979,
+0.04375, -0.2875, 0.29375, 0, 0, 1,
+0.046875, -0.275, 0.29375, 0, 0, 1,
+ 0, -0.271875, 0.29375, 0, 0, 1,
+-0.04375, -0.2875, 0.29375, 0, 0, 1,
+ 0, -0.30625, 0.29375, 0, 0, 1,
+ 0, -0.271875, 0.29375, 0, 0, 1,
+0.05, -0.090625, 0.3, 0.7826, -0.6087, -0.1304,
+0.053125, -0.090625, 0.31875, 0.7826, -0.6087, -0.1304,
+0.0375, -0.109375, 0.3125, 0.7826, -0.6087, -0.1304,
+-0.0375, -0.109375, 0.3125, -0.7826, -0.6087, -0.1304,
+-0.053125, -0.090625, 0.31875, -0.7826, -0.6087, -0.1304,
+-0.05, -0.090625, 0.3, -0.7826, -0.6087, -0.1304,
+0.040625, -0.059375, 0.296875, 0.9448, 0.1919, -0.2657,
+0.04375, -0.053125, 0.3125, 0.9448, 0.1919, -0.2657,
+0.053125, -0.090625, 0.31875, 0.9448, 0.1919, -0.2657,
+-0.053125, -0.090625, 0.31875, -0.9448, 0.1919, -0.2657,
+-0.04375, -0.053125, 0.3125, -0.9448, 0.1919, -0.2657,
+-0.040625, -0.059375, 0.296875, -0.9448, 0.1919, -0.2657,
+0.015625, -0.05, 0.3125, 0.1018, 0.9165, -0.387,
+0.04375, -0.053125, 0.3125, 0.1018, 0.9165, -0.387,
+0.040625, -0.059375, 0.296875, 0.1018, 0.9165, -0.387,
+-0.015625, -0.05, 0.3125, -0.0693, 0.9004, -0.4294,
+ 0, -0.05625, 0.296875, -0.0693, 0.9004, -0.4294,
+-0.040625, -0.059375, 0.296875, -0.0693, 0.9004, -0.4294,
+ 0, -0.075, 0.31875, -0.6905, 0.5492, 0.4708,
+0.015625, -0.05, 0.3125, -0.6905, 0.5492, 0.4708,
+ 0, -0.05625, 0.296875, -0.6905, 0.5492, 0.4708,
+ 0, -0.075, 0.31875, 1, 0, 0,
+ 0, -0.078125, 0.3, 1, 0, 0,
+ 0, -0.05625, 0.296875, 1, 0, 0,
+0.034375, -0.115625, 0.296875, 0.4319, -0.8639, 0.2592,
+0.0375, -0.109375, 0.3125, 0.4319, -0.8639, 0.2592,
+ 0, -0.128125, 0.3125, 0.4319, -0.8639, 0.2592,
+-0.034375, -0.115625, 0.296875, -0.4071, -0.8956, 0.1791,
+ 0, -0.13125, 0.296875, -0.4071, -0.8956, 0.1791,
+ 0, -0.128125, 0.3125, -0.4071, -0.8956, 0.1791,
+0.0375, -0.109375, 0.3125, 0.2873, -0.5747, 0.7663,
+0.03125, -0.1, 0.321875, 0.2873, -0.5747, 0.7663,
+ 0, -0.115625, 0.321875, 0.2873, -0.5747, 0.7663,
+-0.0375, -0.109375, 0.3125, -0.2873, -0.5747, 0.7663,
+ 0, -0.128125, 0.3125, -0.2873, -0.5747, 0.7663,
+ 0, -0.115625, 0.321875, -0.2873, -0.5747, 0.7663,
+ 0, -0.075, 0.31875, -0.6667, 0.6667, 0.3333,
+ 0, -0.08125, 0.33125, -0.6667, 0.6667, 0.3333,
+0.01875, -0.059375, 0.325, -0.6667, 0.6667, 0.3333,
+-0.01875, -0.059375, 0.325, 0.6667, 0.6667, 0.3333,
+ 0, -0.08125, 0.33125, 0.6667, 0.6667, 0.3333,
+ 0, -0.075, 0.31875, 0.6667, 0.6667, 0.3333,
+0.015625, -0.05, 0.3125, 0.1348, 0.8086, 0.5727,
+0.01875, -0.059375, 0.325, 0.1348, 0.8086, 0.5727,
+0.0375, -0.0625, 0.325, 0.1348, 0.8086, 0.5727,
+-0.0375, -0.0625, 0.325, -0.1348, 0.8086, 0.5727,
+-0.01875, -0.059375, 0.325, -0.1348, 0.8086, 0.5727,
+-0.015625, -0.05, 0.3125, -0.1348, 0.8086, 0.5727,
+0.0375, -0.0625, 0.325, 0.7639, 0.2971, 0.5729,
+0.04375, -0.090625, 0.33125, 0.7639, 0.2971, 0.5729,
+0.053125, -0.090625, 0.31875, 0.7639, 0.2971, 0.5729,
+-0.0375, -0.0625, 0.325, -0.7532, 0.287, 0.5918,
+-0.04375, -0.053125, 0.3125, -0.7532, 0.287, 0.5918,
+-0.053125, -0.090625, 0.31875, -0.7532, 0.287, 0.5918,
+0.053125, -0.090625, 0.31875, 0.4116, -0.8575, 0.3087,
+0.04375, -0.090625, 0.33125, 0.4116, -0.8575, 0.3087,
+0.03125, -0.1, 0.321875, 0.4116, -0.8575, 0.3087,
+-0.03125, -0.1, 0.321875, -0.4116, -0.8575, 0.3087,
+-0.04375, -0.090625, 0.33125, -0.4116, -0.8575, 0.3087,
+-0.053125, -0.090625, 0.31875, -0.4116, -0.8575, 0.3087,
+0.04375, -0.090625, 0.33125, 0.0375, 0.2247, 0.9737,
+0.0375, -0.0625, 0.325, 0.0375, 0.2247, 0.9737,
+0.01875, -0.059375, 0.325, 0.0375, 0.2247, 0.9737,
+-0.04375, -0.090625, 0.33125, -0.0502, 0.2343, 0.9709,
+ 0, -0.08125, 0.33125, -0.0502, 0.2343, 0.9709,
+-0.01875, -0.059375, 0.325, -0.0502, 0.2343, 0.9709,
+ 0, -0.08125, 0.33125, 0.1304, -0.2609, 0.9565,
+ 0, -0.115625, 0.321875, 0.1304, -0.2609, 0.9565,
+0.03125, -0.1, 0.321875, 0.1304, -0.2609, 0.9565,
+-0.03125, -0.1, 0.321875, -0.1304, -0.2609, 0.9565,
+ 0, -0.115625, 0.321875, -0.1304, -0.2609, 0.9565,
+ 0, -0.08125, 0.33125, -0.1304, -0.2609, 0.9565,
+ 0, -0.05625, 0.296875, -0.0631, -0.8206, 0.5681,
+0.040625, -0.059375, 0.296875, -0.0631, -0.8206, 0.5681,
+0.05, -0.040625, 0.325, -0.0631, -0.8206, 0.5681,
+-0.05, -0.040625, 0.325, 0.0631, -0.8206, 0.5681,
+-0.040625, -0.059375, 0.296875, 0.0631, -0.8206, 0.5681,
+ 0, -0.05625, 0.296875, 0.0631, -0.8206, 0.5681,
+0.040625, -0.059375, 0.296875, 0.7325, 0.2817, 0.6198,
+0.05, -0.090625, 0.3, 0.7325, 0.2817, 0.6198,
+0.065625, -0.096875, 0.284375, 0.7325, 0.2817, 0.6198,
+-0.065625, -0.096875, 0.284375, -0.7325, 0.2817, 0.6198,
+-0.05, -0.090625, 0.3, -0.7325, 0.2817, 0.6198,
+-0.040625, -0.059375, 0.296875, -0.7325, 0.2817, 0.6198,
+0.034375, -0.115625, 0.296875, 0.3319, 0.0738, 0.9404,
+0.071875, -0.125, 0.284375, 0.3319, 0.0738, 0.9404,
+0.065625, -0.096875, 0.284375, 0.3319, 0.0738, 0.9404,
+-0.034375, -0.115625, 0.296875, -0.546, -0.431, 0.7184,
+-0.05, -0.090625, 0.3, -0.546, -0.431, 0.7184,
+-0.065625, -0.096875, 0.284375, -0.546, -0.431, 0.7184,
+0.03125, -0.178125, 0.3, 0.2815, 0.0662, 0.9573,
+0.084375, -0.178125, 0.284375, 0.2815, 0.0662, 0.9573,
+0.071875, -0.125, 0.284375, 0.2815, 0.0662, 0.9573,
+-0.03125, -0.178125, 0.3, -0.3231, 0.0311, 0.9459,
+-0.034375, -0.115625, 0.296875, -0.3231, 0.0311, 0.9459,
+-0.071875, -0.125, 0.284375, -0.3231, 0.0311, 0.9459,
+0.103125, -0.125, 0.221875, 0.8753, 0.2059, 0.4376,
+0.071875, -0.125, 0.284375, 0.8753, 0.2059, 0.4376,
+0.084375, -0.178125, 0.284375, 0.8753, 0.2059, 0.4376,
+-0.103125, -0.125, 0.221875, -0.7357, 0.391, 0.5531,
+-0.125, -0.175, 0.228125, -0.7357, 0.391, 0.5531,
+-0.084375, -0.178125, 0.284375, -0.7357, 0.391, 0.5531,
+0.09375, -0.1, 0.221875, 0.8973, 0.1994, 0.3938,
+0.065625, -0.096875, 0.284375, 0.8973, 0.1994, 0.3938,
+0.071875, -0.125, 0.284375, 0.8973, 0.1994, 0.3938,
+-0.09375, -0.1, 0.221875, -0.848, 0.318, 0.424,
+-0.103125, -0.125, 0.221875, -0.848, 0.318, 0.424,
+-0.071875, -0.125, 0.284375, -0.848, 0.318, 0.424,
+0.08125, -0.075, 0.225, 0.9586, 0.0664, 0.2767,
+0.05, -0.040625, 0.325, 0.9586, 0.0664, 0.2767,
+0.065625, -0.096875, 0.284375, 0.9586, 0.0664, 0.2767,
+-0.065625, -0.096875, 0.284375, -0.9586, 0.0664, 0.2767,
+-0.05, -0.040625, 0.325, -0.9586, 0.0664, 0.2767,
+-0.08125, -0.075, 0.225, -0.9586, 0.0664, 0.2767,
+ 0, -0.30625, 0.29375, 0.2524, -0.8655, 0.4327,
+ 0, -0.309375, 0.2875, 0.2524, -0.8655, 0.4327,
+0.0375, -0.296875, 0.290625, 0.2524, -0.8655, 0.4327,
+ 0, -0.30625, 0.29375, -0.1783, -0.4161, 0.8917,
+-0.04375, -0.2875, 0.29375, -0.1783, -0.4161, 0.8917,
+-0.0375, -0.296875, 0.290625, -0.1783, -0.4161, 0.8917,
+0.046875, -0.334375, 0.284375, -0.1751, -0.2043, 0.9631,
+0.04375, -0.2875, 0.29375, -0.1751, -0.2043, 0.9631,
+0.0375, -0.296875, 0.290625, -0.1751, -0.2043, 0.9631,
+-0.0375, -0.296875, 0.290625, 0.1751, -0.2043, 0.9631,
+-0.04375, -0.2875, 0.29375, 0.1751, -0.2043, 0.9631,
+-0.046875, -0.334375, 0.284375, 0.1751, -0.2043, 0.9631,
+0.025, -0.353125, 0.278125, -0.1219, -0.1829, 0.9755,
+0.046875, -0.334375, 0.284375, -0.1219, -0.1829, 0.9755,
+0.0375, -0.328125, 0.284375, -0.1219, -0.1829, 0.9755,
+-0.0375, -0.328125, 0.284375, 0.1219, -0.1829, 0.9755,
+-0.046875, -0.334375, 0.284375, 0.1219, -0.1829, 0.9755,
+-0.025, -0.353125, 0.278125, 0.1219, -0.1829, 0.9755,
+ 0, -0.35625, 0.275, -0.1562, 0.3123, 0.937,
+0.025, -0.353125, 0.278125, -0.1562, 0.3123, 0.937,
+0.01875, -0.346875, 0.275, -0.1562, 0.3123, 0.937,
+-0.01875, -0.346875, 0.275, 0.1562, 0.3123, 0.937,
+-0.025, -0.353125, 0.278125, 0.1562, 0.3123, 0.937,
+ 0, -0.35625, 0.275, 0.1562, 0.3123, 0.937,
+0.01875, -0.346875, 0.275, -0.1582, 0.9494, 0.2713,
+0.01875, -0.340625, 0.253125, -0.1582, 0.9494, 0.2713,
+ 0, -0.34375, 0.253125, -0.1582, 0.9494, 0.2713,
+-0.01875, -0.346875, 0.275, 0.1582, 0.9494, 0.2713,
+ 0, -0.35, 0.275, 0.1582, 0.9494, 0.2713,
+ 0, -0.34375, 0.253125, 0.1582, 0.9494, 0.2713,
+0.01875, -0.346875, 0.275, -0.7238, 0.6857, 0.0762,
+0.0375, -0.328125, 0.284375, -0.7238, 0.6857, 0.0762,
+0.0375, -0.325, 0.25625, -0.7238, 0.6857, 0.0762,
+-0.0375, -0.325, 0.25625, 0.7238, 0.6857, 0.0762,
+-0.0375, -0.328125, 0.284375, 0.7238, 0.6857, 0.0762,
+-0.01875, -0.346875, 0.275, 0.7238, 0.6857, 0.0762,
+0.0375, -0.328125, 0.284375, -1, 0, 0,
+0.0375, -0.296875, 0.290625, -1, 0, 0,
+0.0375, -0.3, 0.265625, -1, 0, 0,
+-0.0375, -0.3, 0.265625, 1, 0, 0,
+-0.0375, -0.296875, 0.290625, 1, 0, 0,
+-0.0375, -0.328125, 0.284375, 1, 0, 0,
+ 0, -0.309375, 0.2875, 0.3051, -0.945, 0.1181,
+ 0, -0.3125, 0.2625, 0.3051, -0.945, 0.1181,
+0.0375, -0.3, 0.265625, 0.3051, -0.945, 0.1181,
+ 0, -0.309375, 0.2875, -0.3051, -0.945, 0.1181,
+-0.0375, -0.296875, 0.290625, -0.3051, -0.945, 0.1181,
+-0.0375, -0.3, 0.265625, -0.3051, -0.945, 0.1181,
+ 0, -0.3125, 0.2625, 0.0478, -0.287, 0.9567,
+ 0, -0.34375, 0.253125, 0.0478, -0.287, 0.9567,
+0.01875, -0.340625, 0.253125, 0.0478, -0.287, 0.9567,
+-0.01875, -0.340625, 0.253125, -0.0478, -0.287, 0.9567,
+ 0, -0.34375, 0.253125, -0.0478, -0.287, 0.9567,
+ 0, -0.3125, 0.2625, -0.0478, -0.287, 0.9567,
+0.053125, 0.084375, 0.303125, -0.5488, -0.3293, 0.7684,
+0.065625, 0.05625, 0.3, -0.5488, -0.3293, 0.7684,
+0.075, 0.0625, 0.309375, -0.5488, -0.3293, 0.7684,
+-0.075, 0.0625, 0.309375, 0.5488, -0.3293, 0.7684,
+-0.065625, 0.05625, 0.3, 0.5488, -0.3293, 0.7684,
+-0.053125, 0.084375, 0.303125, 0.5488, -0.3293, 0.7684,
+0.05, 0.121875, 0.30625, -0.4945, -0.113, 0.8618,
+0.053125, 0.084375, 0.303125, -0.4945, -0.113, 0.8618,
+0.06875, 0.0875, 0.3125, -0.4945, -0.113, 0.8618,
+-0.06875, 0.0875, 0.3125, 0.4945, -0.113, 0.8618,
+-0.053125, 0.084375, 0.303125, 0.4945, -0.113, 0.8618,
+-0.05, 0.121875, 0.30625, 0.4945, -0.113, 0.8618,
+0.05, 0.121875, 0.30625, -0.2595, 0.1038, 0.9601,
+0.071875, 0.11875, 0.3125, -0.2595, 0.1038, 0.9601,
+0.084375, 0.15, 0.3125, -0.2595, 0.1038, 0.9601,
+-0.05, 0.121875, 0.30625, 0.1717, -0.009, 0.9851,
+-0.065625, 0.165625, 0.309375, 0.1717, -0.009, 0.9851,
+-0.084375, 0.15, 0.3125, 0.1717, -0.009, 0.9851,
+0.08125, 0.0375, 0.296875, -0.6684, -0.4595, 0.5849,
+0.090625, 0.04375, 0.3125, -0.6684, -0.4595, 0.5849,
+0.075, 0.0625, 0.309375, -0.6684, -0.4595, 0.5849,
+-0.08125, 0.0375, 0.296875, 0.4332, -0.4874, 0.7581,
+-0.065625, 0.05625, 0.3, 0.4332, -0.4874, 0.7581,
+-0.075, 0.0625, 0.309375, 0.4332, -0.4874, 0.7581,
+0.08125, 0.0375, 0.296875, -0.1156, -0.6359, 0.7631,
+0.15, 0.00625, 0.28125, -0.1156, -0.6359, 0.7631,
+0.15, 0.025, 0.296875, -0.1156, -0.6359, 0.7631,
+-0.15, 0.025, 0.296875, 0.1156, -0.6359, 0.7631,
+-0.15, 0.00625, 0.28125, 0.1156, -0.6359, 0.7631,
+-0.08125, 0.0375, 0.296875, 0.1156, -0.6359, 0.7631,
+0.15, 0.00625, 0.28125, 0.4242, -0.6211, 0.659,
+0.196875, 0.025, 0.26875, 0.4242, -0.6211, 0.659,
+0.190625, 0.040625, 0.2875, 0.4242, -0.6211, 0.659,
+-0.190625, 0.040625, 0.2875, -0.4242, -0.6211, 0.659,
+-0.196875, 0.025, 0.26875, -0.4242, -0.6211, 0.659,
+-0.15, 0.00625, 0.28125, -0.4242, -0.6211, 0.659,
+0.196875, 0.025, 0.26875, 0.4767, -0.3557, 0.8039,
+0.25, 0.075, 0.259375, 0.4767, -0.3557, 0.8039,
+0.23125, 0.078125, 0.271875, 0.4767, -0.3557, 0.8039,
+-0.23125, 0.078125, 0.271875, -0.4767, -0.3557, 0.8039,
+-0.25, 0.075, 0.259375, -0.4767, -0.3557, 0.8039,
+-0.196875, 0.025, 0.26875, -0.4767, -0.3557, 0.8039,
+0.25, 0.075, 0.259375, 0.5871, -0.0839, 0.8052,
+0.25625, 0.11875, 0.259375, 0.5871, -0.0839, 0.8052,
+0.234375, 0.115625, 0.275, 0.5871, -0.0839, 0.8052,
+-0.234375, 0.115625, 0.275, -0.5871, -0.0839, 0.8052,
+-0.25625, 0.11875, 0.259375, -0.5871, -0.0839, 0.8052,
+-0.25, 0.075, 0.259375, -0.5871, -0.0839, 0.8052,
+0.240625, 0.15, 0.265625, 0.5774, 0.1155, 0.8083,
+0.225, 0.140625, 0.278125, 0.5774, 0.1155, 0.8083,
+0.234375, 0.115625, 0.275, 0.5774, 0.1155, 0.8083,
+-0.240625, 0.15, 0.265625, -0.5657, 0.1197, 0.8159,
+-0.25625, 0.11875, 0.259375, -0.5657, 0.1197, 0.8159,
+-0.234375, 0.115625, 0.275, -0.5657, 0.1197, 0.8159,
+0.171875, 0.175, 0.2875, 0.5214, 0.6574, 0.5441,
+0.16875, 0.159375, 0.309375, 0.5214, 0.6574, 0.5441,
+0.225, 0.140625, 0.278125, 0.5214, 0.6574, 0.5441,
+-0.171875, 0.175, 0.2875, -0.4082, 0.4082, 0.8165,
+-0.240625, 0.15, 0.265625, -0.4082, 0.4082, 0.8165,
+-0.225, 0.140625, 0.278125, -0.4082, 0.4082, 0.8165,
+0.171875, 0.175, 0.2875, 0.3358, 0.3478, 0.8754,
+0.13125, 0.190625, 0.296875, 0.3358, 0.3478, 0.8754,
+0.134375, 0.171875, 0.303125, 0.3358, 0.3478, 0.8754,
+-0.134375, 0.171875, 0.303125, -0.3358, 0.3478, 0.8754,
+-0.13125, 0.190625, 0.296875, -0.3358, 0.3478, 0.8754,
+-0.171875, 0.175, 0.2875, -0.3358, 0.3478, 0.8754,
+0.13125, 0.190625, 0.296875, 0.1452, 0.3774, 0.9146,
+0.1, 0.1875, 0.303125, 0.1452, 0.3774, 0.9146,
+0.109375, 0.16875, 0.309375, 0.1452, 0.3774, 0.9146,
+-0.109375, 0.16875, 0.309375, -0.1452, 0.3774, 0.9146,
+-0.1, 0.1875, 0.303125, -0.1452, 0.3774, 0.9146,
+-0.13125, 0.190625, 0.296875, -0.1452, 0.3774, 0.9146,
+0.1, 0.1875, 0.303125, 0.0301, 0.2306, 0.9726,
+0.065625, 0.165625, 0.309375, 0.0301, 0.2306, 0.9726,
+0.084375, 0.15, 0.3125, 0.0301, 0.2306, 0.9726,
+-0.084375, 0.15, 0.3125, -0.0301, 0.2306, 0.9726,
+-0.065625, 0.165625, 0.309375, -0.0301, 0.2306, 0.9726,
+-0.1, 0.1875, 0.303125, -0.0301, 0.2306, 0.9726,
+0.084375, 0.15, 0.3125, 0.3553, -0.5739, 0.7379,
+0.09375, 0.14375, 0.303125, 0.3553, -0.5739, 0.7379,
+0.1125, 0.159375, 0.30625, 0.3553, -0.5739, 0.7379,
+-0.084375, 0.15, 0.3125, -0.2804, -0.2181, 0.9348,
+-0.109375, 0.16875, 0.309375, -0.2804, -0.2181, 0.9348,
+-0.1125, 0.159375, 0.30625, -0.2804, -0.2181, 0.9348,
+0.134375, 0.171875, 0.303125, 0.2627, -0.2252, 0.9382,
+0.109375, 0.16875, 0.309375, 0.2627, -0.2252, 0.9382,
+0.1125, 0.159375, 0.30625, 0.2627, -0.2252, 0.9382,
+-0.1125, 0.159375, 0.30625, -0.2627, -0.2252, 0.9382,
+-0.109375, 0.16875, 0.309375, -0.2627, -0.2252, 0.9382,
+-0.134375, 0.171875, 0.303125, -0.2627, -0.2252, 0.9382,
+0.134375, 0.171875, 0.303125, -0.0631, -0.3156, 0.9468,
+0.134375, 0.1625, 0.3, -0.0631, -0.3156, 0.9468,
+0.165625, 0.15625, 0.3, -0.0631, -0.3156, 0.9468,
+-0.134375, 0.171875, 0.303125, 0.3766, -0.8339, 0.4035,
+-0.16875, 0.159375, 0.309375, 0.3766, -0.8339, 0.4035,
+-0.165625, 0.15625, 0.3, 0.3766, -0.8339, 0.4035,
+0.16875, 0.159375, 0.309375, -0.2016, -0.9071, 0.3696,
+0.165625, 0.15625, 0.3, -0.2016, -0.9071, 0.3696,
+0.2125, 0.134375, 0.271875, -0.2016, -0.9071, 0.3696,
+-0.16875, 0.159375, 0.309375, -0.0823, -0.7822, 0.6175,
+-0.225, 0.140625, 0.278125, -0.0823, -0.7822, 0.6175,
+-0.2125, 0.134375, 0.271875, -0.0823, -0.7822, 0.6175,
+0.234375, 0.115625, 0.275, -0.3356, -0.2397, 0.911,
+0.225, 0.140625, 0.278125, -0.3356, -0.2397, 0.911,
+0.2125, 0.134375, 0.271875, -0.3356, -0.2397, 0.911,
+-0.2125, 0.134375, 0.271875, 0.3356, -0.2397, 0.911,
+-0.225, 0.140625, 0.278125, 0.3356, -0.2397, 0.911,
+-0.234375, 0.115625, 0.275, 0.3356, -0.2397, 0.911,
+0.234375, 0.115625, 0.275, -0.4568, 0.0508, 0.8881,
+0.221875, 0.1125, 0.26875, -0.4568, 0.0508, 0.8881,
+0.21875, 0.084375, 0.26875, -0.4568, 0.0508, 0.8881,
+-0.234375, 0.115625, 0.275, 0.2692, -0.0577, 0.9614,
+-0.23125, 0.078125, 0.271875, 0.2692, -0.0577, 0.9614,
+-0.21875, 0.084375, 0.26875, 0.2692, -0.0577, 0.9614,
+0.190625, 0.040625, 0.2875, -0.0247, 0.4072, 0.913,
+0.23125, 0.078125, 0.271875, -0.0247, 0.4072, 0.913,
+0.21875, 0.084375, 0.26875, -0.0247, 0.4072, 0.913,
+-0.21875, 0.084375, 0.26875, 0.0247, 0.4072, 0.913,
+-0.23125, 0.078125, 0.271875, 0.0247, 0.4072, 0.913,
+-0.190625, 0.040625, 0.2875, 0.0247, 0.4072, 0.913,
+0.190625, 0.040625, 0.2875, -0.0487, 0.6815, 0.7302,
+0.184375, 0.046875, 0.28125, -0.0487, 0.6815, 0.7302,
+0.15, 0.034375, 0.290625, -0.0487, 0.6815, 0.7302,
+-0.190625, 0.040625, 0.2875, 0.0213, 0.5546, 0.8319,
+-0.15, 0.025, 0.296875, 0.0213, 0.5546, 0.8319,
+-0.15, 0.034375, 0.290625, 0.0213, 0.5546, 0.8319,
+0.15, 0.025, 0.296875, 0.3378, 0.5221, 0.7831,
+0.15, 0.034375, 0.290625, 0.3378, 0.5221, 0.7831,
+0.096875, 0.05, 0.303125, 0.3378, 0.5221, 0.7831,
+-0.15, 0.025, 0.296875, -0.3778, 0.6342, 0.6746,
+-0.090625, 0.04375, 0.3125, -0.3778, 0.6342, 0.6746,
+-0.096875, 0.05, 0.303125, -0.3778, 0.6342, 0.6746,
+0.075, 0.0625, 0.309375, 0.4988, 0.53, 0.6858,
+0.090625, 0.04375, 0.3125, 0.4988, 0.53, 0.6858,
+0.096875, 0.05, 0.303125, 0.4988, 0.53, 0.6858,
+-0.096875, 0.05, 0.303125, -0.4988, 0.53, 0.6858,
+-0.090625, 0.04375, 0.3125, -0.4988, 0.53, 0.6858,
+-0.075, 0.0625, 0.309375, -0.4988, 0.53, 0.6858,
+0.084375, 0.15, 0.3125, 0.7895, -0.3158, 0.5263,
+0.071875, 0.11875, 0.3125, 0.7895, -0.3158, 0.5263,
+0.078125, 0.11875, 0.303125, 0.7895, -0.3158, 0.5263,
+-0.078125, 0.11875, 0.303125, -0.7895, -0.3158, 0.5263,
+-0.071875, 0.11875, 0.3125, -0.7895, -0.3158, 0.5263,
+-0.084375, 0.15, 0.3125, -0.7895, -0.3158, 0.5263,
+0.071875, 0.11875, 0.3125, 0.807, -0.0807, 0.5851,
+0.06875, 0.0875, 0.3125, 0.807, -0.0807, 0.5851,
+0.078125, 0.090625, 0.3, 0.807, -0.0807, 0.5851,
+-0.078125, 0.090625, 0.3, -0.807, -0.0807, 0.5851,
+-0.06875, 0.0875, 0.3125, -0.807, -0.0807, 0.5851,
+-0.071875, 0.11875, 0.3125, -0.807, -0.0807, 0.5851,
+0.06875, 0.0875, 0.3125, 0.7868, 0.121, 0.6052,
+0.075, 0.0625, 0.309375, 0.7868, 0.121, 0.6052,
+0.08125, 0.06875, 0.3, 0.7868, 0.121, 0.6052,
+-0.08125, 0.06875, 0.3, -0.7868, 0.121, 0.6052,
+-0.075, 0.0625, 0.309375, -0.7868, 0.121, 0.6052,
+-0.06875, 0.0875, 0.3125, -0.7868, 0.121, 0.6052,
+ 0, 0.171875, 0.296875, -0.6357, 0.6811, -0.3633,
+0.025, 0.196875, 0.3, -0.6357, 0.6811, -0.3633,
+0.04375, 0.184375, 0.24375, -0.6357, 0.6811, -0.3633,
+-0.04375, 0.184375, 0.24375, 0.6357, 0.6811, -0.3633,
+-0.025, 0.196875, 0.3, 0.6357, 0.6811, -0.3633,
+ 0, 0.171875, 0.296875, 0.6357, 0.6811, -0.3633,
+0.025, 0.196875, 0.3, -0.8507, 0.365, -0.3783,
+0.0625, 0.2875, 0.303125, -0.8507, 0.365, -0.3783,
+0.078125, 0.265625, 0.246875, -0.8507, 0.365, -0.3783,
+-0.078125, 0.265625, 0.246875, 0.8507, 0.365, -0.3783,
+-0.0625, 0.2875, 0.303125, 0.8507, 0.365, -0.3783,
+-0.025, 0.196875, 0.3, 0.8507, 0.365, -0.3783,
+0.128125, 0.303125, 0.29375, -0.2197, 0.8626, -0.4557,
+0.134375, 0.275, 0.2375, -0.2197, 0.8626, -0.4557,
+0.078125, 0.265625, 0.246875, -0.2197, 0.8626, -0.4557,
+-0.128125, 0.303125, 0.29375, 0.2664, 0.871, -0.4127,
+-0.0625, 0.2875, 0.303125, 0.2664, 0.871, -0.4127,
+-0.078125, 0.265625, 0.246875, 0.2664, 0.871, -0.4127,
+0.196875, 0.240625, 0.275, 0.5914, 0.7489, -0.2991,
+0.19375, 0.221875, 0.221875, 0.5914, 0.7489, -0.2991,
+0.134375, 0.275, 0.2375, 0.5914, 0.7489, -0.2991,
+-0.196875, 0.240625, 0.275, -0.5932, 0.7445, -0.3063,
+-0.128125, 0.303125, 0.29375, -0.5932, 0.7445, -0.3063,
+-0.134375, 0.275, 0.2375, -0.5932, 0.7445, -0.3063,
+0.284375, 0.19375, 0.25, 0.3653, 0.8833, -0.2938,
+0.271875, 0.18125, 0.196875, 0.3653, 0.8833, -0.2938,
+0.19375, 0.221875, 0.221875, 0.3653, 0.8833, -0.2938,
+-0.284375, 0.19375, 0.25, -0.3714, 0.8685, -0.3284,
+-0.196875, 0.240625, 0.275, -0.3714, 0.8685, -0.3284,
+-0.19375, 0.221875, 0.221875, -0.3714, 0.8685, -0.3284,
+0.284375, 0.19375, 0.25, 0.276, 0.9159, -0.2915,
+0.34375, 0.171875, 0.2375, 0.276, 0.9159, -0.2915,
+0.31875, 0.1625, 0.184375, 0.276, 0.9159, -0.2915,
+-0.31875, 0.1625, 0.184375, -0.276, 0.9159, -0.2915,
+-0.34375, 0.171875, 0.2375, -0.276, 0.9159, -0.2915,
+-0.284375, 0.19375, 0.25, -0.276, 0.9159, -0.2915,
+0.33125, 0.059375, 0.178125, 0.7964, 0.1323, -0.5901,
+0.309375, 0.065625, 0.15, 0.7964, 0.1323, -0.5901,
+0.31875, 0.1625, 0.184375, 0.7964, 0.1323, -0.5901,
+-0.33125, 0.059375, 0.178125, -0.8873, 0.1343, -0.4412,
+-0.34375, 0.171875, 0.2375, -0.8873, 0.1343, -0.4412,
+-0.31875, 0.1625, 0.184375, -0.8873, 0.1343, -0.4412,
+0.33125, 0.059375, 0.178125, 0.5442, -0.7524, -0.3712,
+0.253125, -0.015625, 0.215625, 0.5442, -0.7524, -0.3712,
+0.240625, 0, 0.165625, 0.5442, -0.7524, -0.3712,
+-0.240625, 0, 0.165625, -0.5442, -0.7524, -0.3712,
+-0.253125, -0.015625, 0.215625, -0.5442, -0.7524, -0.3712,
+-0.33125, 0.059375, 0.178125, -0.5442, -0.7524, -0.3712,
+0.253125, -0.015625, 0.215625, 0.4027, -0.7323, -0.5492,
+0.175, -0.05625, 0.2125, 0.4027, -0.7323, -0.5492,
+0.175, -0.0375, 0.1875, 0.4027, -0.7323, -0.5492,
+-0.175, -0.0375, 0.1875, -0.4027, -0.7323, -0.5492,
+-0.175, -0.05625, 0.2125, -0.4027, -0.7323, -0.5492,
+-0.253125, -0.015625, 0.215625, -0.4027, -0.7323, -0.5492,
+ 0, -0.19375, 0.1125, 0.1649, -0.6644, -0.7289,
+0.071875, -0.165625, 0.103125, 0.1649, -0.6644, -0.7289,
+0.05, -0.215625, 0.14375, 0.1649, -0.6644, -0.7289,
+ 0, -0.19375, 0.1125, -0.3617, -0.3858, -0.8487,
+ 0, -0.228125, 0.128125, -0.3617, -0.3858, -0.8487,
+-0.05, -0.215625, 0.14375, -0.3617, -0.3858, -0.8487,
+ 0, -0.228125, 0.128125, 0.3011, -0.0125, -0.9535,
+0.05, -0.215625, 0.14375, 0.3011, -0.0125, -0.9535,
+0.05625, -0.303125, 0.146875, 0.3011, -0.0125, -0.9535,
+ 0, -0.228125, 0.128125, -0.1952, -0.0976, -0.9759,
+ 0, -0.321875, 0.1375, -0.1952, -0.0976, -0.9759,
+-0.05625, -0.303125, 0.146875, -0.1952, -0.0976, -0.9759,
+ 0, -0.321875, 0.1375, 0.2562, -0.3112, -0.9152,
+0.05625, -0.303125, 0.146875, 0.2562, -0.3112, -0.9152,
+0.065625, -0.378125, 0.175, 0.2562, -0.3112, -0.9152,
+ 0, -0.321875, 0.1375, 0.0107, -0.5633, -0.8262,
+ 0, -0.390625, 0.184375, 0.0107, -0.5633, -0.8262,
+-0.065625, -0.378125, 0.175, 0.0107, -0.5633, -0.8262,
+0.071875, -0.3875, 0.221875, 0.0779, -0.9948, -0.0663,
+ 0, -0.39375, 0.23125, 0.0779, -0.9948, -0.0663,
+ 0, -0.390625, 0.184375, 0.0779, -0.9948, -0.0663,
+ 0, -0.390625, 0.184375, -0.0779, -0.9948, -0.0663,
+ 0, -0.39375, 0.23125, -0.0779, -0.9948, -0.0663,
+-0.071875, -0.3875, 0.221875, -0.0779, -0.9948, -0.0663,
+0.13125, -0.378125, 0.209375, 0.1094, -0.9718, -0.2089,
+0.071875, -0.3875, 0.221875, 0.1094, -0.9718, -0.2089,
+0.065625, -0.378125, 0.175, 0.1094, -0.9718, -0.2089,
+-0.065625, -0.378125, 0.175, -0.1094, -0.9718, -0.209,
+-0.071875, -0.3875, 0.221875, -0.1094, -0.9718, -0.209,
+-0.13125, -0.378125, 0.209375, -0.1094, -0.9718, -0.209,
+0.146875, -0.35625, 0.2125, 0.815, -0.5621, -0.1405,
+0.13125, -0.378125, 0.209375, 0.815, -0.5621, -0.1405,
+0.13125, -0.365625, 0.159375, 0.815, -0.5621, -0.1405,
+-0.13125, -0.365625, 0.159375, -0.815, -0.5621, -0.1405,
+-0.13125, -0.378125, 0.209375, -0.815, -0.5621, -0.1405,
+-0.146875, -0.35625, 0.2125, -0.815, -0.5621, -0.1405,
+0.140625, -0.278125, 0.228125, 0.9358, 0.1396, -0.3236,
+0.146875, -0.35625, 0.2125, 0.9358, 0.1396, -0.3236,
+0.115625, -0.284375, 0.153125, 0.9358, 0.1396, -0.3236,
+-0.115625, -0.284375, 0.153125, -0.9358, 0.1396, -0.3236,
+-0.146875, -0.35625, 0.2125, -0.9358, 0.1396, -0.3236,
+-0.140625, -0.278125, 0.228125, -0.9358, 0.1396, -0.3236,
+0.115625, -0.284375, 0.153125, 0.1132, -0.0274, -0.9932,
+0.05625, -0.303125, 0.146875, 0.1132, -0.0274, -0.9932,
+0.05, -0.215625, 0.14375, 0.1132, -0.0274, -0.9932,
+-0.05, -0.215625, 0.14375, -0.1132, -0.0274, -0.9932,
+-0.05625, -0.303125, 0.146875, -0.1132, -0.0274, -0.9932,
+-0.115625, -0.284375, 0.153125, -0.1132, -0.0274, -0.9932,
+0.13125, -0.365625, 0.159375, -0.1497, -0.3635, -0.9195,
+0.065625, -0.378125, 0.175, -0.1497, -0.3635, -0.9195,
+0.05625, -0.303125, 0.146875, -0.1497, -0.3635, -0.9195,
+-0.13125, -0.365625, 0.159375, -0.1211, -0.053, -0.9912,
+-0.115625, -0.284375, 0.153125, -0.1211, -0.053, -0.9912,
+-0.05625, -0.303125, 0.146875, -0.1211, -0.053, -0.9912,
+0.1, -0.2, 0.15625, 0.3706, -0.678, -0.6349,
+0.05, -0.215625, 0.14375, 0.3706, -0.678, -0.6349,
+0.071875, -0.165625, 0.103125, 0.3706, -0.678, -0.6349,
+-0.1, -0.2, 0.15625, -0.9094, 0.1371, -0.3927,
+-0.09375, -0.140625, 0.1625, -0.9094, 0.1371, -0.3927,
+-0.071875, -0.165625, 0.103125, -0.9094, 0.1371, -0.3927,
+0.125, -0.175, 0.228125, 0.9193, 0.1393, -0.3682,
+0.140625, -0.278125, 0.228125, 0.9193, 0.1393, -0.3682,
+0.1, -0.2, 0.15625, 0.9193, 0.1393, -0.3682,
+-0.1, -0.2, 0.15625, -0.9193, 0.1393, -0.3682,
+-0.140625, -0.278125, 0.228125, -0.9193, 0.1393, -0.3682,
+-0.125, -0.175, 0.228125, -0.9193, 0.1393, -0.3682,
+0.0875, -0.1125, 0.171875, 0.9457, 0.2673, -0.185,
+0.084375, -0.090625, 0.1875, 0.9457, 0.2673, -0.185,
+0.09375, -0.1, 0.221875, 0.9457, 0.2673, -0.185,
+-0.0875, -0.1125, 0.171875, -0.9173, 0.344, -0.2007,
+-0.103125, -0.125, 0.221875, -0.9173, 0.344, -0.2007,
+-0.09375, -0.1, 0.221875, -0.9173, 0.344, -0.2007,
+0.09375, -0.140625, 0.1625, 0.9337, 0.2813, -0.2215,
+0.0875, -0.1125, 0.171875, 0.9337, 0.2813, -0.2215,
+0.103125, -0.125, 0.221875, 0.9337, 0.2813, -0.2215,
+-0.09375, -0.140625, 0.1625, -0.9004, 0.3642, -0.238,
+-0.125, -0.175, 0.228125, -0.9004, 0.3642, -0.238,
+-0.103125, -0.125, 0.221875, -0.9004, 0.3642, -0.238,
+0.09375, -0.1, 0.221875, 0.9501, 0.2455, -0.1922,
+0.084375, -0.090625, 0.1875, 0.9501, 0.2455, -0.1922,
+0.08125, -0.06875, 0.2, 0.9501, 0.2455, -0.1922,
+-0.09375, -0.1, 0.221875, -0.8945, 0.4337, 0.1084,
+-0.08125, -0.075, 0.225, -0.8945, 0.4337, 0.1084,
+-0.08125, -0.06875, 0.2, -0.8945, 0.4337, 0.1084,
+0.08125, -0.06875, 0.2, 0.1835, -0.7864, -0.5898,
+0.175, -0.0375, 0.1875, 0.1835, -0.7864, -0.5898,
+0.175, -0.05625, 0.2125, 0.1835, -0.7864, -0.5898,
+-0.08125, -0.06875, 0.2, -0.1596, -0.9577, -0.2394,
+-0.08125, -0.075, 0.225, -0.1596, -0.9577, -0.2394,
+-0.175, -0.05625, 0.2125, -0.1596, -0.9577, -0.2394,
+0.134375, 0.021875, -0.265625, 0.3727, -0.4759, -0.7966,
+0.1375, -0.059375, -0.215625, 0.3727, -0.4759, -0.7966,
+ 0, -0.078125, -0.26875, 0.3727, -0.4759, -0.7966,
+-0.134375, 0.021875, -0.265625, -0.3693, -0.4712, -0.801,
+ 0, 0.028125, -0.33125, -0.3693, -0.4712, -0.801,
+ 0, -0.078125, -0.26875, -0.3693, -0.4712, -0.801,
+0.1375, -0.059375, -0.215625, 0.3263, -0.8342, -0.4446,
+0.11875, -0.125, -0.10625, 0.3263, -0.8342, -0.4446,
+ 0, -0.153125, -0.140625, 0.3263, -0.8342, -0.4446,
+-0.1375, -0.059375, -0.215625, -0.2986, -0.8236, -0.4821,
+ 0, -0.078125, -0.26875, -0.2986, -0.8236, -0.4821,
+ 0, -0.153125, -0.140625, -0.2986, -0.8236, -0.4821,
+ 0, -0.153125, -0.140625, 0.262, -0.9574, -0.1217,
+0.11875, -0.125, -0.10625, 0.262, -0.9574, -0.1217,
+0.084375, -0.15625, 0.065625, 0.262, -0.9574, -0.1217,
+-0.084375, -0.15625, 0.065625, -0.262, -0.9574, -0.1217,
+-0.11875, -0.125, -0.10625, -0.262, -0.9574, -0.1217,
+ 0, -0.153125, -0.140625, -0.262, -0.9574, -0.1217,
+ 0, -0.184375, 0.075, 0.2996, -0.9443, -0.1362,
+0.084375, -0.15625, 0.065625, 0.2996, -0.9443, -0.1362,
+0.071875, -0.165625, 0.103125, 0.2996, -0.9443, -0.1362,
+-0.071875, -0.165625, 0.103125, -0.2996, -0.9443, -0.1362,
+-0.084375, -0.15625, 0.065625, -0.2996, -0.9443, -0.1362,
+ 0, -0.184375, 0.075, -0.2996, -0.9443, -0.1362,
+0.071875, -0.165625, 0.103125, 0.8642, -0.4737, 0.1696,
+0.084375, -0.15625, 0.065625, 0.8642, -0.4737, 0.1696,
+0.0875, -0.1125, 0.171875, 0.8642, -0.4737, 0.1696,
+-0.071875, -0.165625, 0.103125, -0.8305, 0.3333, -0.4463,
+-0.09375, -0.140625, 0.1625, -0.8305, 0.3333, -0.4463,
+-0.0875, -0.1125, 0.171875, -0.8305, 0.3333, -0.4463,
+0.309375, 0.065625, 0.15, 0.6869, -0.6358, 0.3521,
+0.240625, 0, 0.165625, 0.6869, -0.6358, 0.3521,
+0.29375, -0.01875, 0.028125, 0.6869, -0.6358, 0.3521,
+-0.29375, -0.01875, 0.028125, -0.6869, -0.6358, 0.3521,
+-0.240625, 0, 0.165625, -0.6869, -0.6358, 0.3521,
+-0.309375, 0.065625, 0.15, -0.6869, -0.6358, 0.3521,
+0.184375, 0.175, -0.28125, 0.4189, -0.2265, -0.8793,
+0.134375, 0.021875, -0.265625, 0.4189, -0.2265, -0.8793,
+ 0, 0.028125, -0.33125, 0.4189, -0.2265, -0.8793,
+-0.184375, 0.175, -0.28125, -0.295, -0.0454, -0.9544,
+ 0, 0.225, -0.340625, -0.295, -0.0454, -0.9544,
+ 0, 0.028125, -0.33125, -0.295, -0.0454, -0.9544,
+0.18125, 0.340625, 0.09375, 0.1119, 0.9626, 0.2468,
+0.18125, 0.371875, -0.028125, 0.1119, 0.9626, 0.2468,
+ 0, 0.39375, -0.03125, 0.1119, 0.9626, 0.2468,
+-0.18125, 0.340625, 0.09375, -0.1272, 0.9658, 0.226,
+ 0, 0.359375, 0.115625, -0.1272, 0.9658, 0.226,
+ 0, 0.39375, -0.03125, -0.1272, 0.9658, 0.226,
+ 0, 0.39375, -0.03125, 0.1208, 0.9734, -0.1947,
+0.18125, 0.371875, -0.028125, 0.1208, 0.9734, -0.1947,
+0.18125, 0.346875, -0.153125, 0.1208, 0.9734, -0.1947,
+-0.18125, 0.346875, -0.153125, -0.1208, 0.9734, -0.1947,
+-0.18125, 0.371875, -0.028125, -0.1208, 0.9734, -0.1947,
+ 0, 0.39375, -0.03125, -0.1208, 0.9734, -0.1947,
+ 0, 0.359375, -0.21875, 0.314, 0.5711, -0.7585,
+0.18125, 0.346875, -0.153125, 0.314, 0.5711, -0.7585,
+0.184375, 0.175, -0.28125, 0.314, 0.5711, -0.7585,
+-0.184375, 0.175, -0.28125, -0.314, 0.5711, -0.7585,
+-0.18125, 0.346875, -0.153125, -0.314, 0.5711, -0.7585,
+ 0, 0.359375, -0.21875, -0.314, 0.5711, -0.7585,
+0.271875, 0.18125, 0.196875, 0.3231, 0.9288, -0.1817,
+0.31875, 0.1625, 0.184375, 0.3231, 0.9288, -0.1817,
+0.290625, 0.1625, 0.134375, 0.3231, 0.9288, -0.1817,
+-0.290625, 0.1625, 0.134375, -0.3231, 0.9288, -0.1817,
+-0.31875, 0.1625, 0.184375, -0.3231, 0.9288, -0.1817,
+-0.271875, 0.18125, 0.196875, -0.3231, 0.9288, -0.1817,
+0.253125, 0.18125, 0.1125, 0.0452, 0.7955, 0.6043,
+0.290625, 0.1625, 0.134375, 0.0452, 0.7955, 0.6043,
+0.31875, 0.225, 0.05, 0.0452, 0.7955, 0.6043,
+-0.31875, 0.225, 0.05, -0.0452, 0.7955, 0.6043,
+-0.290625, 0.1625, 0.134375, -0.0452, 0.7955, 0.6043,
+-0.253125, 0.18125, 0.1125, -0.0452, 0.7955, 0.6043,
+0.25625, 0.28125, 0.021875, 0.6144, 0.7696, 0.1738,
+0.31875, 0.225, 0.05, 0.6144, 0.7696, 0.1738,
+0.31875, 0.246875, -0.046875, 0.6144, 0.7696, 0.1738,
+-0.31875, 0.246875, -0.046875, -0.6144, 0.7696, 0.1738,
+-0.31875, 0.225, 0.05, -0.6144, 0.7696, 0.1738,
+-0.25625, 0.28125, 0.021875, -0.6144, 0.7696, 0.1738,
+0.25625, 0.3, -0.078125, 0.6935, 0.6857, -0.2212,
+0.31875, 0.246875, -0.046875, 0.6935, 0.6857, -0.2212,
+0.31875, 0.215625, -0.14375, 0.6935, 0.6857, -0.2212,
+-0.31875, 0.215625, -0.14375, -0.6935, 0.6857, -0.2212,
+-0.31875, 0.246875, -0.046875, -0.6935, 0.6857, -0.2212,
+-0.25625, 0.3, -0.078125, -0.6935, 0.6857, -0.2212,
+0.246875, 0.13125, -0.234375, 0.6304, 0.2517, -0.7343,
+0.25625, 0.271875, -0.178125, 0.6304, 0.2517, -0.7343,
+0.31875, 0.215625, -0.14375, 0.6304, 0.2517, -0.7343,
+-0.246875, 0.13125, -0.234375, -0.7104, 0.1364, -0.6904,
+-0.309375, 0.10625, -0.175, -0.7104, 0.1364, -0.6904,
+-0.31875, 0.215625, -0.14375, -0.7104, 0.1364, -0.6904,
+0.184375, 0.175, -0.28125, 0.3179, 0.5704, -0.7574,
+0.18125, 0.346875, -0.153125, 0.3179, 0.5704, -0.7574,
+0.25625, 0.271875, -0.178125, 0.3179, 0.5704, -0.7574,
+-0.25625, 0.271875, -0.178125, -0.3179, 0.5704, -0.7574,
+-0.18125, 0.346875, -0.153125, -0.3179, 0.5704, -0.7574,
+-0.184375, 0.175, -0.28125, -0.3179, 0.5704, -0.7574,
+0.18125, 0.346875, -0.153125, 0.6289, 0.7624, -0.1525,
+0.18125, 0.371875, -0.028125, 0.6289, 0.7624, -0.1525,
+0.25625, 0.3, -0.078125, 0.6289, 0.7624, -0.1525,
+-0.25625, 0.3, -0.078125, -0.6289, 0.7624, -0.1525,
+-0.18125, 0.371875, -0.028125, -0.6289, 0.7624, -0.1525,
+-0.18125, 0.346875, -0.153125, -0.6289, 0.7624, -0.1525,
+0.18125, 0.371875, -0.028125, 0.7088, 0.6833, 0.1752,
+0.18125, 0.340625, 0.09375, 0.7088, 0.6833, 0.1752,
+0.25625, 0.28125, 0.021875, 0.7088, 0.6833, 0.1752,
+-0.25625, 0.28125, 0.021875, -0.7088, 0.6833, 0.1752,
+-0.18125, 0.340625, 0.09375, -0.7088, 0.6833, 0.1752,
+-0.18125, 0.371875, -0.028125, -0.7088, 0.6833, 0.1752,
+0.18125, 0.340625, 0.09375, 0.6885, 0.383, 0.6158,
+0.184375, 0.209375, 0.171875, 0.6885, 0.383, 0.6158,
+0.253125, 0.18125, 0.1125, 0.6885, 0.383, 0.6158,
+-0.253125, 0.18125, 0.1125, -0.6885, 0.383, 0.6158,
+-0.184375, 0.209375, 0.171875, -0.6885, 0.383, 0.6158,
+-0.18125, 0.340625, 0.09375, -0.6885, 0.383, 0.6158,
+0.271875, 0.18125, 0.196875, 0.3238, 0.9434, -0.072,
+0.253125, 0.18125, 0.1125, 0.3238, 0.9434, -0.072,
+0.184375, 0.209375, 0.171875, 0.3238, 0.9434, -0.072,
+-0.271875, 0.18125, 0.196875, -0.3669, 0.884, -0.2898,
+-0.19375, 0.221875, 0.221875, -0.3669, 0.884, -0.2898,
+-0.184375, 0.209375, 0.171875, -0.3669, 0.884, -0.2898,
+0.184375, 0.209375, 0.171875, 0.1548, 0.508, 0.8473,
+0.18125, 0.340625, 0.09375, 0.1548, 0.508, 0.8473,
+ 0, 0.359375, 0.115625, 0.1548, 0.508, 0.8473,
+-0.184375, 0.209375, 0.171875, -0.2854, 0.6237, 0.7277,
+ 0, 0.228125, 0.228125, -0.2854, 0.6237, 0.7277,
+ 0, 0.359375, 0.115625, -0.2854, 0.6237, 0.7277,
+0.04375, 0.184375, 0.24375, -0.1819, 0.1145, -0.9766,
+0.078125, 0.265625, 0.246875, -0.1819, 0.1145, -0.9766,
+0.134375, 0.275, 0.2375, -0.1819, 0.1145, -0.9766,
+-0.134375, 0.275, 0.2375, 0.1819, 0.1145, -0.9766,
+-0.078125, 0.265625, 0.246875, 0.1819, 0.1145, -0.9766,
+-0.04375, 0.184375, 0.24375, 0.1819, 0.1145, -0.9766,
+0.04375, 0.184375, 0.24375, -0.2638, 0.9462, -0.1871,
+0.19375, 0.221875, 0.221875, -0.2638, 0.9462, -0.1871,
+0.184375, 0.209375, 0.171875, -0.2638, 0.9462, -0.1871,
+-0.184375, 0.209375, 0.171875, 0.2638, 0.9462, -0.1871,
+-0.19375, 0.221875, 0.221875, 0.2638, 0.9462, -0.1871,
+-0.04375, 0.184375, 0.24375, 0.2638, 0.9462, -0.1871,
+0.309375, 0.065625, 0.15, 0.934, 0.2255, 0.2773,
+0.340625, 0.09375, 0.021875, 0.934, 0.2255, 0.2773,
+0.290625, 0.1625, 0.134375, 0.934, 0.2255, 0.2773,
+-0.309375, 0.065625, 0.15, -0.8681, 0.0893, -0.4883,
+-0.31875, 0.1625, 0.184375, -0.8681, 0.0893, -0.4883,
+-0.290625, 0.1625, 0.134375, -0.8681, 0.0893, -0.4883,
+0.340625, 0.09375, 0.021875, 0.9758, 0.1241, 0.18,
+0.34375, 0.128125, -0.01875, 0.9758, 0.1241, 0.18,
+0.31875, 0.225, 0.05, 0.9758, 0.1241, 0.18,
+-0.31875, 0.225, 0.05, -0.9758, 0.1241, 0.18,
+-0.34375, 0.128125, -0.01875, -0.9758, 0.1241, 0.18,
+-0.340625, 0.09375, 0.021875, -0.9758, 0.1241, 0.18,
+0.34375, 0.128125, -0.01875, 0.9613, 0.1472, -0.233,
+0.328125, 0.13125, -0.08125, 0.9613, 0.1472, -0.233,
+0.31875, 0.246875, -0.046875, 0.9613, 0.1472, -0.233,
+-0.31875, 0.246875, -0.046875, -0.9613, 0.1472, -0.233,
+-0.328125, 0.13125, -0.08125, -0.9613, 0.1472, -0.233,
+-0.34375, 0.128125, -0.01875, -0.9613, 0.1472, -0.233,
+0.31875, 0.215625, -0.14375, 0.9956, 0.0893, -0.0288,
+0.31875, 0.246875, -0.046875, 0.9956, 0.0893, -0.0288,
+0.328125, 0.13125, -0.08125, 0.9956, 0.0893, -0.0288,
+-0.31875, 0.215625, -0.14375, -0.9817, -0.0304, -0.1882,
+-0.309375, 0.10625, -0.175, -0.9817, -0.0304, -0.1882,
+-0.328125, 0.13125, -0.08125, -0.9817, -0.0304, -0.1882,
+0.11875, -0.125, -0.10625, 0.6374, -0.7651, 0.0915,
+0.171875, -0.078125, -0.084375, 0.6374, -0.7651, 0.0915,
+0.1625, -0.06875, 0.059375, 0.6374, -0.7651, 0.0915,
+-0.11875, -0.125, -0.10625, -0.7466, -0.6646, 0.0285,
+-0.084375, -0.15625, 0.065625, -0.7466, -0.6646, 0.0285,
+-0.1625, -0.06875, 0.059375, -0.7466, -0.6646, 0.0285,
+0.1625, -0.06875, 0.059375, 0.372, -0.9244, 0.0845,
+0.171875, -0.078125, -0.084375, 0.372, -0.9244, 0.0845,
+0.2375, -0.05, -0.065625, 0.372, -0.9244, 0.0845,
+-0.1625, -0.06875, 0.059375, -0.3723, -0.9243, 0.0847,
+-0.29375, -0.01875, 0.028125, -0.3723, -0.9243, 0.0847,
+-0.2375, -0.05, -0.065625, -0.3723, -0.9243, 0.0847,
+0.240625, 0, 0.165625, 0.5281, -0.8354, 0.1522,
+0.175, -0.0375, 0.1875, 0.5281, -0.8354, 0.1522,
+0.1625, -0.06875, 0.059375, 0.5281, -0.8354, 0.1522,
+-0.1625, -0.06875, 0.059375, -0.5281, -0.8354, 0.1522,
+-0.175, -0.0375, 0.1875, -0.5281, -0.8354, 0.1522,
+-0.240625, 0, 0.165625, -0.5281, -0.8354, 0.1522,
+0.175, -0.0375, 0.1875, 0.307, -0.5237, 0.7946,
+0.084375, -0.090625, 0.1875, 0.307, -0.5237, 0.7946,
+0.0875, -0.1125, 0.171875, 0.307, -0.5237, 0.7946,
+-0.0875, -0.1125, 0.171875, -0.307, -0.5237, 0.7946,
+-0.084375, -0.090625, 0.1875, -0.307, -0.5237, 0.7946,
+-0.175, -0.0375, 0.1875, -0.307, -0.5237, 0.7946,
+0.25625, -0.003125, -0.171875, 0.5236, -0.329, -0.7859,
+0.19375, 0.009375, -0.21875, 0.5236, -0.329, -0.7859,
+0.246875, 0.13125, -0.234375, 0.5236, -0.329, -0.7859,
+-0.25625, -0.003125, -0.171875, -0.5881, -0.307, -0.7483,
+-0.309375, 0.10625, -0.175, -0.5881, -0.307, -0.7483,
+-0.246875, 0.13125, -0.234375, -0.5881, -0.307, -0.7483,
+0.246875, 0.13125, -0.234375, 0.5396, -0.3343, -0.7727,
+0.19375, 0.009375, -0.21875, 0.5396, -0.3343, -0.7727,
+0.134375, 0.021875, -0.265625, 0.5396, -0.3343, -0.7727,
+-0.246875, 0.13125, -0.234375, -0.4694, -0.24, -0.8498,
+-0.184375, 0.175, -0.28125, -0.4694, -0.24, -0.8498,
+-0.134375, 0.021875, -0.265625, -0.4694, -0.24, -0.8498,
+0.171875, -0.078125, -0.084375, 0.2144, -0.8341, -0.5082,
+0.19375, 0.009375, -0.21875, 0.2144, -0.8341, -0.5082,
+0.25625, -0.003125, -0.171875, 0.2144, -0.8341, -0.5082,
+-0.171875, -0.078125, -0.084375, -0.4463, -0.8452, -0.2941,
+-0.2375, -0.05, -0.065625, -0.4463, -0.8452, -0.2941,
+-0.25625, -0.003125, -0.171875, -0.4463, -0.8452, -0.2941,
+0.1375, -0.059375, -0.215625, 0.7365, -0.6154, -0.2808,
+0.19375, 0.009375, -0.21875, 0.7365, -0.6154, -0.2808,
+0.171875, -0.078125, -0.084375, 0.7365, -0.6154, -0.2808,
+-0.1375, -0.059375, -0.215625, -0.6973, -0.661, -0.2771,
+-0.11875, -0.125, -0.10625, -0.6973, -0.661, -0.2771,
+-0.171875, -0.078125, -0.084375, -0.6973, -0.661, -0.2771,
+0.35625, 0.1625, -0.09375, 0.3244, 0.4867, 0.8111,
+0.36875, 0.14375, -0.0875, 0.3244, 0.4867, 0.8111,
+0.40625, 0.165625, -0.115625, 0.3244, 0.4867, 0.8111,
+-0.35625, 0.1625, -0.09375, -0.3691, 0.2855, 0.8844,
+-0.409375, 0.190625, -0.125, -0.3691, 0.2855, 0.8844,
+-0.40625, 0.165625, -0.115625, -0.3691, 0.2855, 0.8844,
+0.409375, 0.190625, -0.125, 0.4649, 0.2593, 0.8465,
+0.40625, 0.165625, -0.115625, 0.4649, 0.2593, 0.8465,
+0.475, 0.175, -0.15625, 0.4649, 0.2593, 0.8465,
+-0.475, 0.175, -0.15625, -0.4649, 0.2593, 0.8465,
+-0.40625, 0.165625, -0.115625, -0.4649, 0.2593, 0.8465,
+-0.409375, 0.190625, -0.125, -0.4649, 0.2593, 0.8465,
+0.475, 0.175, -0.15625, 0.1817, -0.0079, 0.9833,
+0.50625, 0.115625, -0.1625, 0.1817, -0.0079, 0.9833,
+0.540625, 0.128125, -0.16875, 0.1817, -0.0079, 0.9833,
+-0.475, 0.175, -0.15625, -0.3188, 0.1993, 0.9266,
+-0.49375, 0.203125, -0.16875, -0.3188, 0.1993, 0.9266,
+-0.540625, 0.128125, -0.16875, -0.3188, 0.1993, 0.9266,
+0.50625, 0.115625, -0.1625, 0.2925, -0.0758, 0.9533,
+0.484375, 0.03125, -0.1625, 0.2925, -0.0758, 0.9533,
+0.5125, 0.021875, -0.171875, 0.2925, -0.0758, 0.9533,
+-0.50625, 0.115625, -0.1625, -0.2076, -0.0836, 0.9746,
+-0.540625, 0.128125, -0.16875, -0.2076, -0.0836, 0.9746,
+-0.5125, 0.021875, -0.171875, -0.2076, -0.0836, 0.9746,
+0.484375, 0.03125, -0.1625, 0.5847, -0.2198, 0.7809,
+0.4125, -0.015625, -0.121875, 0.5847, -0.2198, 0.7809,
+0.415625, -0.040625, -0.13125, 0.5847, -0.2198, 0.7809,
+-0.484375, 0.03125, -0.1625, -0.3398, 0.0824, 0.9369,
+-0.5125, 0.021875, -0.171875, -0.3398, 0.0824, 0.9369,
+-0.415625, -0.040625, -0.13125, -0.3398, 0.0824, 0.9369,
+0.415625, -0.040625, -0.13125, 0.6509, -0.1939, 0.734,
+0.4125, -0.015625, -0.121875, 0.6509, -0.1939, 0.734,
+0.33125, -0.028125, -0.053125, 0.6509, -0.1939, 0.734,
+-0.33125, -0.028125, -0.053125, -0.6509, -0.1939, 0.734,
+-0.4125, -0.015625, -0.121875, -0.6509, -0.1939, 0.734,
+-0.415625, -0.040625, -0.13125, -0.6509, -0.1939, 0.734,
+0.4125, -0.015625, -0.121875, 0.4075, 0.7506, 0.5201,
+0.415625, 0, -0.146875, 0.4075, 0.7506, 0.5201,
+0.353125, -0.009375, -0.084375, 0.4075, 0.7506, 0.5201,
+-0.353125, -0.009375, -0.084375, -0.4075, 0.7506, 0.5201,
+-0.415625, 0, -0.146875, -0.4075, 0.7506, 0.5201,
+-0.4125, -0.015625, -0.121875, -0.4075, 0.7506, 0.5201,
+0.484375, 0.03125, -0.1625, -0.2655, 0.8296, 0.4911,
+0.475, 0.0375, -0.178125, -0.2655, 0.8296, 0.4911,
+0.415625, 0, -0.146875, -0.2655, 0.8296, 0.4911,
+-0.415625, 0, -0.146875, 0.2655, 0.8296, 0.4911,
+-0.475, 0.0375, -0.178125, 0.2655, 0.8296, 0.4911,
+-0.484375, 0.03125, -0.1625, 0.2655, 0.8296, 0.4911,
+0.49375, 0.1, -0.178125, -0.7885, 0.2366, 0.5677,
+0.475, 0.0375, -0.178125, -0.7885, 0.2366, 0.5677,
+0.484375, 0.03125, -0.1625, -0.7885, 0.2366, 0.5677,
+-0.49375, 0.1, -0.178125, 0.8576, 0.2223, 0.4637,
+-0.50625, 0.115625, -0.1625, 0.8576, 0.2223, 0.4637,
+-0.484375, 0.03125, -0.1625, 0.8576, 0.2223, 0.4637,
+0.46875, 0.14375, -0.175, -0.5242, -0.3548, 0.7742,
+0.49375, 0.1, -0.178125, -0.5242, -0.3548, 0.7742,
+0.50625, 0.115625, -0.1625, -0.5242, -0.3548, 0.7742,
+-0.46875, 0.14375, -0.175, 0.5257, -0.3579, 0.7717,
+-0.475, 0.175, -0.15625, 0.5257, -0.3579, 0.7717,
+-0.50625, 0.115625, -0.1625, 0.5257, -0.3579, 0.7717,
+0.409375, 0.1375, -0.14375, 0.439, -0.5252, 0.729,
+0.46875, 0.14375, -0.175, 0.439, -0.5252, 0.729,
+0.475, 0.175, -0.15625, 0.439, -0.5252, 0.729,
+-0.409375, 0.1375, -0.14375, -0.4663, -0.5991, 0.6509,
+-0.40625, 0.165625, -0.115625, -0.4663, -0.5991, 0.6509,
+-0.475, 0.175, -0.15625, -0.4663, -0.5991, 0.6509,
+0.40625, 0.165625, -0.115625, 0.6888, -0.4428, 0.574,
+0.36875, 0.14375, -0.0875, 0.6888, -0.4428, 0.574,
+0.378125, 0.121875, -0.115625, 0.6888, -0.4428, 0.574,
+-0.378125, 0.121875, -0.115625, -0.6888, -0.4428, 0.574,
+-0.36875, 0.14375, -0.0875, -0.6888, -0.4428, 0.574,
+-0.40625, 0.165625, -0.115625, -0.6888, -0.4428, 0.574,
+0.2375, -0.05, -0.065625, 0.6302, -0.7658, 0.1282,
+0.2875, -0.009375, -0.06875, 0.6302, -0.7658, 0.1282,
+0.290625, 0, -0.028125, 0.6302, -0.7658, 0.1282,
+-0.2375, -0.05, -0.065625, -0.7507, -0.6131, -0.2461,
+-0.29375, -0.01875, 0.028125, -0.7507, -0.6131, -0.2461,
+-0.290625, 0, -0.028125, -0.7507, -0.6131, -0.2461,
+0.309375, -0.05625, -0.05, -0.2175, 0.2733, 0.937,
+0.33125, -0.028125, -0.053125, -0.2175, 0.2733, 0.937,
+0.2875, -0.009375, -0.06875, -0.2175, 0.2733, 0.937,
+-0.309375, -0.05625, -0.05, 0.1788, 0.2923, 0.9395,
+-0.2375, -0.05, -0.065625, 0.1788, 0.2923, 0.9395,
+-0.2875, -0.009375, -0.06875, 0.1788, 0.2923, 0.9395,
+0.340625, 0.09375, 0.021875, 0.9046, -0.3869, -0.1792,
+0.29375, -0.01875, 0.028125, 0.9046, -0.3869, -0.1792,
+0.290625, 0, -0.028125, 0.9046, -0.3869, -0.1792,
+-0.290625, 0, -0.028125, -0.9046, -0.3869, -0.1792,
+-0.29375, -0.01875, 0.028125, -0.9046, -0.3869, -0.1792,
+-0.340625, 0.09375, 0.021875, -0.9046, -0.3869, -0.1792,
+0.328125, 0.13125, -0.08125, 0.1782, -0.0891, 0.98,
+0.3375, 0.115625, -0.084375, 0.1782, -0.0891, 0.98,
+0.36875, 0.14375, -0.0875, 0.1782, -0.0891, 0.98,
+-0.36875, 0.14375, -0.0875, -0.1782, -0.0891, 0.98,
+-0.3375, 0.115625, -0.084375, -0.1782, -0.0891, 0.98,
+-0.328125, 0.13125, -0.08125, -0.1782, -0.0891, 0.98,
+0.33125, -0.028125, -0.053125, -0.2335, 0.8972, 0.3749,
+0.353125, -0.009375, -0.084375, -0.2335, 0.8972, 0.3749,
+0.325, -0.00625, -0.109375, -0.2335, 0.8972, 0.3749,
+-0.325, -0.00625, -0.109375, 0.2335, 0.8972, 0.3749,
+-0.353125, -0.009375, -0.084375, 0.2335, 0.8972, 0.3749,
+-0.33125, -0.028125, -0.053125, 0.2335, 0.8972, 0.3749,
+0.2875, 0.015625, -0.075, 0.7177, 0.1689, 0.6755,
+0.2875, -0.009375, -0.06875, 0.7177, 0.1689, 0.6755,
+0.325, -0.00625, -0.109375, 0.7177, 0.1689, 0.6755,
+-0.2875, 0.015625, -0.075, -0.448, -0.448, 0.7737,
+-0.3375, 0.00625, -0.109375, -0.448, -0.448, 0.7737,
+-0.325, -0.00625, -0.109375, -0.448, -0.448, 0.7737,
+0.303125, 0.0375, -0.109375, 0.5313, 0.5844, 0.6134,
+0.2875, 0.015625, -0.075, 0.5313, 0.5844, 0.6134,
+0.3375, 0.00625, -0.109375, 0.5313, 0.5844, 0.6134,
+-0.3375, 0.00625, -0.109375, -0.5313, 0.5844, 0.6134,
+-0.2875, 0.015625, -0.075, -0.5313, 0.5844, 0.6134,
+-0.303125, 0.0375, -0.109375, -0.5313, 0.5844, 0.6134,
+0.31875, 0.08125, -0.084375, 0.9008, -0.4075, 0.1501,
+0.2875, 0.015625, -0.075, 0.9008, -0.4075, 0.1501,
+0.303125, 0.0375, -0.109375, 0.9008, -0.4075, 0.1501,
+-0.31875, 0.08125, -0.084375, -0.5534, -0.5534, 0.6225,
+-0.334375, 0.06875, -0.109375, -0.5534, -0.5534, 0.6225,
+-0.303125, 0.0375, -0.109375, -0.5534, -0.5534, 0.6225,
+0.31875, 0.08125, -0.084375, 0.5815, -0.5217, 0.6243,
+0.334375, 0.06875, -0.109375, 0.5815, -0.5217, 0.6243,
+0.35625, 0.096875, -0.10625, 0.5815, -0.5217, 0.6243,
+-0.31875, 0.08125, -0.084375, -0.5724, -0.3122, 0.7582,
+-0.3375, 0.115625, -0.084375, -0.5724, -0.3122, 0.7582,
+-0.35625, 0.096875, -0.10625, -0.5724, -0.3122, 0.7582,
+0.3375, 0.115625, -0.084375, 0.6138, -0.2571, 0.7465,
+0.35625, 0.096875, -0.10625, 0.6138, -0.2571, 0.7465,
+0.378125, 0.121875, -0.115625, 0.6138, -0.2571, 0.7465,
+-0.3375, 0.115625, -0.084375, -0.5597, -0.5533, 0.6169,
+-0.36875, 0.14375, -0.0875, -0.5597, -0.5533, 0.6169,
+-0.378125, 0.121875, -0.115625, -0.5597, -0.5533, 0.6169,
+0.34375, 0.128125, -0.01875, 0.8779, -0.4788, 0.0076,
+0.31875, 0.08125, -0.084375, 0.8779, -0.4788, 0.0076,
+0.3375, 0.115625, -0.084375, 0.8779, -0.4788, 0.0076,
+-0.3375, 0.115625, -0.084375, -0.8779, -0.4788, 0.0076,
+-0.31875, 0.08125, -0.084375, -0.8779, -0.4788, 0.0076,
+-0.34375, 0.128125, -0.01875, -0.8779, -0.4788, 0.0076,
+0.290625, 0, -0.028125, 0.8717, -0.4446, -0.2063,
+0.2875, 0.015625, -0.075, 0.8717, -0.4446, -0.2063,
+0.31875, 0.08125, -0.084375, 0.8717, -0.4446, -0.2063,
+-0.290625, 0, -0.028125, -0.9227, -0.3765, -0.0825,
+-0.34375, 0.128125, -0.01875, -0.9227, -0.3765, -0.0825,
+-0.31875, 0.08125, -0.084375, -0.9227, -0.3765, -0.0825,
+0.378125, 0.121875, -0.115625, 0.7661, -0.6363, 0.0909,
+0.35625, 0.096875, -0.10625, 0.7661, -0.6363, 0.0909,
+0.35625, 0.09375, -0.128125, 0.7661, -0.6363, 0.0909,
+-0.35625, 0.09375, -0.128125, -0.7661, -0.6363, 0.0909,
+-0.35625, 0.096875, -0.10625, -0.7661, -0.6363, 0.0909,
+-0.378125, 0.121875, -0.115625, -0.7661, -0.6363, 0.0909,
+0.334375, 0.06875, -0.109375, 0.793, -0.5947, 0.1322,
+0.3375, 0.06875, -0.128125, 0.793, -0.5947, 0.1322,
+0.35625, 0.09375, -0.128125, 0.793, -0.5947, 0.1322,
+-0.334375, 0.06875, -0.109375, -0.7815, -0.6176, 0.0882,
+-0.35625, 0.096875, -0.10625, -0.7815, -0.6176, 0.0882,
+-0.35625, 0.09375, -0.128125, -0.7815, -0.6176, 0.0882,
+0.334375, 0.06875, -0.109375, 0.7022, -0.7022, 0.117,
+0.303125, 0.0375, -0.109375, 0.7022, -0.7022, 0.117,
+0.30625, 0.0375, -0.128125, 0.7022, -0.7022, 0.117,
+-0.30625, 0.0375, -0.128125, -0.7022, -0.7022, 0.117,
+-0.303125, 0.0375, -0.109375, -0.7022, -0.7022, 0.117,
+-0.334375, 0.06875, -0.109375, -0.7022, -0.7022, 0.117,
+0.328125, 0.034375, -0.109375, 0.2408, 0.9631, -0.1204,
+0.33125, 0.03125, -0.128125, 0.2408, 0.9631, -0.1204,
+0.30625, 0.0375, -0.128125, 0.2408, 0.9631, -0.1204,
+-0.328125, 0.034375, -0.109375, -0.124, 0.9921, 0.0207,
+-0.303125, 0.0375, -0.109375, -0.124, 0.9921, 0.0207,
+-0.30625, 0.0375, -0.128125, -0.124, 0.9921, 0.0207,
+0.3375, 0.00625, -0.109375, 0.9251, 0.3469, 0.1542,
+0.340625, 0.00625, -0.128125, 0.9251, 0.3469, 0.1542,
+0.33125, 0.03125, -0.128125, 0.9251, 0.3469, 0.1542,
+-0.3375, 0.00625, -0.109375, -0.9435, 0.3145, 0.1048,
+-0.328125, 0.034375, -0.109375, -0.9435, 0.3145, 0.1048,
+-0.33125, 0.03125, -0.128125, -0.9435, 0.3145, 0.1048,
+0.3375, 0.00625, -0.109375, 0.7071, -0.7071, 0,
+0.325, -0.00625, -0.109375, 0.7071, -0.7071, 0,
+0.325, -0.00625, -0.128125, 0.7071, -0.7071, 0,
+-0.325, -0.00625, -0.128125, -0.7071, -0.7071, 0,
+-0.325, -0.00625, -0.109375, -0.7071, -0.7071, 0,
+-0.3375, 0.00625, -0.109375, -0.7071, -0.7071, 0,
+0.325, -0.00625, -0.109375, -0.0157, 0.9898, 0.1414,
+0.353125, -0.009375, -0.084375, -0.0157, 0.9898, 0.1414,
+0.353125, -0.00625, -0.10625, -0.0157, 0.9898, 0.1414,
+-0.353125, -0.00625, -0.10625, 0.0157, 0.9898, 0.1414,
+-0.353125, -0.009375, -0.084375, 0.0157, 0.9898, 0.1414,
+-0.325, -0.00625, -0.109375, 0.0157, 0.9898, 0.1414,
+0.409375, 0.1375, -0.14375, 0.6266, -0.7211, 0.2956,
+0.378125, 0.121875, -0.115625, 0.6266, -0.7211, 0.2956,
+0.38125, 0.115625, -0.1375, 0.6266, -0.7211, 0.2956,
+-0.38125, 0.115625, -0.1375, -0.6266, -0.7211, 0.2956,
+-0.378125, 0.121875, -0.115625, -0.6266, -0.7211, 0.2956,
+-0.409375, 0.1375, -0.14375, -0.6266, -0.7211, 0.2956,
+0.46875, 0.14375, -0.175, 0.2714, -0.9022, 0.3353,
+0.409375, 0.1375, -0.14375, 0.2714, -0.9022, 0.3353,
+0.415625, 0.13125, -0.165625, 0.2714, -0.9022, 0.3353,
+-0.415625, 0.13125, -0.165625, -0.2714, -0.9022, 0.3353,
+-0.409375, 0.1375, -0.14375, -0.2714, -0.9022, 0.3353,
+-0.46875, 0.14375, -0.175, -0.2714, -0.9022, 0.3353,
+0.49375, 0.1, -0.178125, -0.8651, -0.4853, -0.1266,
+0.46875, 0.14375, -0.175, -0.8651, -0.4853, -0.1266,
+0.475, 0.1375, -0.19375, -0.8651, -0.4853, -0.1266,
+-0.475, 0.1375, -0.19375, 0.8651, -0.4853, -0.1266,
+-0.46875, 0.14375, -0.175, 0.8651, -0.4853, -0.1266,
+-0.49375, 0.1, -0.178125, 0.8651, -0.4853, -0.1266,
+0.49375, 0.1, -0.178125, -0.8538, 0.2328, -0.4657,
+0.503125, 0.096875, -0.196875, -0.8538, 0.2328, -0.4657,
+0.484375, 0.034375, -0.19375, -0.8538, 0.2328, -0.4657,
+-0.49375, 0.1, -0.178125, 0.8096, 0.2429, -0.5343,
+-0.475, 0.0375, -0.178125, 0.8096, 0.2429, -0.5343,
+-0.484375, 0.034375, -0.19375, 0.8096, 0.2429, -0.5343,
+0.475, 0.0375, -0.178125, -0.5433, 0.6985, -0.4657,
+0.484375, 0.034375, -0.19375, -0.5433, 0.6985, -0.4657,
+0.41875, 0, -0.16875, -0.5433, 0.6985, -0.4657,
+-0.475, 0.0375, -0.178125, 0.5621, 0.8231, -0.0803,
+-0.415625, 0, -0.146875, 0.5621, 0.8231, -0.0803,
+-0.41875, 0, -0.16875, 0.5621, 0.8231, -0.0803,
+0.415625, 0, -0.146875, -0.1096, 0.9939, -0.0157,
+0.41875, 0, -0.16875, -0.1096, 0.9939, -0.0157,
+0.353125, -0.00625, -0.10625, -0.1096, 0.9939, -0.0157,
+-0.415625, 0, -0.146875, 0.0071, 0.9899, 0.1414,
+-0.353125, -0.009375, -0.084375, 0.0071, 0.9899, 0.1414,
+-0.353125, -0.00625, -0.10625, 0.0071, 0.9899, 0.1414,
+0.340625, 0.00625, -0.128125, 0.1738, 0.0097, 0.9847,
+0.375, 0.025, -0.134375, 0.1738, 0.0097, 0.9847,
+0.35625, 0.04375, -0.13125, 0.1738, 0.0097, 0.9847,
+-0.340625, 0.00625, -0.128125, -0.1046, 0.0392, 0.9937,
+-0.33125, 0.03125, -0.128125, -0.1046, 0.0392, 0.9937,
+-0.35625, 0.04375, -0.13125, -0.1046, 0.0392, 0.9937,
+0.375, 0.025, -0.134375, 0.4134, 0.0413, 0.9096,
+0.4, 0.05, -0.146875, 0.4134, 0.0413, 0.9096,
+0.384375, 0.06875, -0.140625, 0.4134, 0.0413, 0.9096,
+-0.375, 0.025, -0.134375, -0.2461, 0.0852, 0.9655,
+-0.35625, 0.04375, -0.13125, -0.2461, 0.0852, 0.9655,
+-0.384375, 0.06875, -0.140625, -0.2461, 0.0852, 0.9655,
+0.384375, 0.06875, -0.140625, 0.3228, -0.0461, 0.9453,
+0.4, 0.05, -0.146875, 0.3228, -0.0461, 0.9453,
+0.421875, 0.075, -0.153125, 0.3228, -0.0461, 0.9453,
+-0.421875, 0.075, -0.153125, -0.3228, -0.0461, 0.9453,
+-0.4, 0.05, -0.146875, -0.3228, -0.0461, 0.9453,
+-0.384375, 0.06875, -0.140625, -0.3228, -0.0461, 0.9453,
+0.421875, 0.075, -0.153125, 0.122, 0.0458, 0.9915,
+0.44375, 0.084375, -0.15625, 0.122, 0.0458, 0.9915,
+0.434375, 0.109375, -0.15625, 0.122, 0.0458, 0.9915,
+-0.421875, 0.075, -0.153125, -0.2104, 0.0124, 0.9775,
+-0.40625, 0.09375, -0.15, -0.2104, 0.0124, 0.9775,
+-0.434375, 0.109375, -0.15625, -0.2104, 0.0124, 0.9775,
+0.415625, 0.13125, -0.165625, 0.5679, 0.1916, 0.8005,
+0.38125, 0.115625, -0.1375, 0.5679, 0.1916, 0.8005,
+0.40625, 0.09375, -0.15, 0.5679, 0.1916, 0.8005,
+-0.40625, 0.09375, -0.15, -0.5679, 0.1916, 0.8005,
+-0.38125, 0.115625, -0.1375, -0.5679, 0.1916, 0.8005,
+-0.415625, 0.13125, -0.165625, -0.5679, 0.1916, 0.8005,
+0.384375, 0.06875, -0.140625, 0.4244, -0.032, 0.9049,
+0.40625, 0.09375, -0.15, 0.4244, -0.032, 0.9049,
+0.38125, 0.115625, -0.1375, 0.4244, -0.032, 0.9049,
+-0.384375, 0.06875, -0.140625, -0.3787, -0.0364, 0.9248,
+-0.35625, 0.09375, -0.128125, -0.3787, -0.0364, 0.9248,
+-0.38125, 0.115625, -0.1375, -0.3787, -0.0364, 0.9248,
+0.3375, 0.06875, -0.128125, 0.257, 0.0723, 0.9637,
+0.35625, 0.04375, -0.13125, 0.257, 0.0723, 0.9637,
+0.384375, 0.06875, -0.140625, 0.257, 0.0723, 0.9637,
+-0.3375, 0.06875, -0.128125, -0.253, -0.1897, 0.9487,
+-0.35625, 0.09375, -0.128125, -0.253, -0.1897, 0.9487,
+-0.384375, 0.06875, -0.140625, -0.253, -0.1897, 0.9487,
+0.33125, 0.03125, -0.128125, 0.1351, -0.0225, 0.9906,
+0.35625, 0.04375, -0.13125, 0.1351, -0.0225, 0.9906,
+0.3375, 0.06875, -0.128125, 0.1351, -0.0225, 0.9906,
+-0.3375, 0.06875, -0.128125, -0.1351, -0.0225, 0.9906,
+-0.35625, 0.04375, -0.13125, -0.1351, -0.0225, 0.9906,
+-0.33125, 0.03125, -0.128125, -0.1351, -0.0225, 0.9906,
+0.353125, -0.00625, -0.10625, -0.2981, 0.7454, 0.5963,
+0.375, 0.025, -0.134375, -0.2981, 0.7454, 0.5963,
+0.340625, 0.00625, -0.128125, -0.2981, 0.7454, 0.5963,
+-0.353125, -0.00625, -0.10625, 0.487, 0.6088, 0.6262,
+-0.325, -0.00625, -0.128125, 0.487, 0.6088, 0.6262,
+-0.340625, 0.00625, -0.128125, 0.487, 0.6088, 0.6262,
+0.41875, 0, -0.16875, 0.5571, -0.1486, 0.8171,
+0.4, 0.05, -0.146875, 0.5571, -0.1486, 0.8171,
+0.375, 0.025, -0.134375, 0.5571, -0.1486, 0.8171,
+-0.375, 0.025, -0.134375, -0.5571, -0.1486, 0.8171,
+-0.4, 0.05, -0.146875, -0.5571, -0.1486, 0.8171,
+-0.41875, 0, -0.16875, -0.5571, -0.1486, 0.8171,
+0.421875, 0.075, -0.153125, 0.4723, -0.1986, 0.8588,
+0.4, 0.05, -0.146875, 0.4723, -0.1986, 0.8588,
+0.41875, 0, -0.16875, 0.4723, -0.1986, 0.8588,
+-0.421875, 0.075, -0.153125, -0.4388, -0.2008, 0.8759,
+-0.484375, 0.034375, -0.19375, -0.4388, -0.2008, 0.8759,
+-0.41875, 0, -0.16875, -0.4388, -0.2008, 0.8759,
+0.44375, 0.084375, -0.15625, 0.2975, -0.4062, 0.864,
+0.421875, 0.075, -0.153125, 0.2975, -0.4062, 0.864,
+0.484375, 0.034375, -0.19375, 0.2975, -0.4062, 0.864,
+-0.44375, 0.084375, -0.15625, -0.5786, -0.1334, 0.8046,
+-0.503125, 0.096875, -0.196875, -0.5786, -0.1334, 0.8046,
+-0.484375, 0.034375, -0.19375, -0.5786, -0.1334, 0.8046,
+0.475, 0.1375, -0.19375, 0.5771, 0.2164, 0.7875,
+0.434375, 0.109375, -0.15625, 0.5771, 0.2164, 0.7875,
+0.44375, 0.084375, -0.15625, 0.5771, 0.2164, 0.7875,
+-0.44375, 0.084375, -0.15625, -0.5771, 0.2164, 0.7875,
+-0.434375, 0.109375, -0.15625, -0.5771, 0.2164, 0.7875,
+-0.475, 0.1375, -0.19375, -0.5771, 0.2164, 0.7875,
+0.415625, -0.040625, -0.13125, 0.0931, -0.9932, -0.0692,
+0.309375, -0.05625, -0.05, 0.0931, -0.9932, -0.0692,
+0.315625, -0.05, -0.13125, 0.0931, -0.9932, -0.0692,
+-0.315625, -0.05, -0.13125, -0.0931, -0.9932, -0.0692,
+-0.309375, -0.05625, -0.05, -0.0931, -0.9932, -0.0692,
+-0.415625, -0.040625, -0.13125, -0.0931, -0.9932, -0.0692,
+0.5125, 0.021875, -0.171875, 0.5161, -0.8527, -0.0812,
+0.415625, -0.040625, -0.13125, 0.5161, -0.8527, -0.0812,
+0.415625, -0.034375, -0.196875, 0.5161, -0.8527, -0.0812,
+-0.415625, -0.034375, -0.196875, -0.5161, -0.8527, -0.0812,
+-0.415625, -0.040625, -0.13125, -0.5161, -0.8527, -0.0812,
+-0.5125, 0.021875, -0.171875, -0.5161, -0.8527, -0.0812,
+0.5125, 0.021875, -0.171875, 0.9264, -0.246, 0.2851,
+0.525, 0.021875, -0.2125, 0.9264, -0.246, 0.2851,
+0.546875, 0.11875, -0.2, 0.9264, -0.246, 0.2851,
+-0.5125, 0.021875, -0.171875, -0.9309, -0.2541, 0.2624,
+-0.540625, 0.128125, -0.16875, -0.9309, -0.2541, 0.2624,
+-0.546875, 0.11875, -0.2, -0.9309, -0.2541, 0.2624,
+0.540625, 0.128125, -0.16875, 0.8267, 0.5627, -0.0035,
+0.546875, 0.11875, -0.2, 0.8267, 0.5627, -0.0035,
+0.5, 0.1875, -0.21875, 0.8267, 0.5627, -0.0035,
+-0.540625, 0.128125, -0.16875, -0.8465, 0.5291, -0.0595,
+-0.49375, 0.203125, -0.16875, -0.8465, 0.5291, -0.0595,
+-0.5, 0.1875, -0.21875, -0.8465, 0.5291, -0.0595,
+0.49375, 0.203125, -0.16875, -0.2146, 0.9243, -0.3157,
+0.5, 0.1875, -0.21875, -0.2146, 0.9243, -0.3157,
+0.409375, 0.175, -0.19375, -0.2146, 0.9243, -0.3157,
+-0.49375, 0.203125, -0.16875, 0.2511, 0.9439, -0.2145,
+-0.409375, 0.190625, -0.125, 0.2511, 0.9439, -0.2145,
+-0.409375, 0.175, -0.19375, 0.2511, 0.9439, -0.2145,
+0.409375, 0.190625, -0.125, -0.4196, 0.8851, -0.2012,
+0.409375, 0.175, -0.19375, -0.4196, 0.8851, -0.2012,
+0.34375, 0.153125, -0.153125, -0.4196, 0.8851, -0.2012,
+-0.409375, 0.190625, -0.125, 0.4841, 0.8743, -0.0361,
+-0.35625, 0.1625, -0.09375, 0.4841, 0.8743, -0.0361,
+-0.34375, 0.153125, -0.153125, 0.4841, 0.8743, -0.0361,
+0.415625, -0.034375, -0.196875, -0.547, -0.0144, -0.837,
+0.315625, -0.05, -0.13125, -0.547, -0.0144, -0.837,
+0.34375, 0.153125, -0.153125, -0.547, -0.0144, -0.837,
+-0.415625, -0.034375, -0.196875, 0.5256, -0.003, -0.8507,
+-0.409375, 0.175, -0.19375, 0.5256, -0.003, -0.8507,
+-0.34375, 0.153125, -0.153125, 0.5256, -0.003, -0.8507,
+0.409375, 0.175, -0.19375, -0.2556, -0.0749, -0.9639,
+0.5, 0.1875, -0.21875, -0.2556, -0.0749, -0.9639,
+0.525, 0.021875, -0.2125, -0.2556, -0.0749, -0.9639,
+-0.525, 0.021875, -0.2125, 0.2556, -0.0749, -0.9639,
+-0.5, 0.1875, -0.21875, 0.2556, -0.0749, -0.9639,
+-0.409375, 0.175, -0.19375, 0.2556, -0.0749, -0.9639,
+0.328125, 0.13125, -0.08125, -0.733, 0.6786, 0.0472,
+0.35625, 0.1625, -0.09375, -0.733, 0.6786, 0.0472,
+0.34375, 0.153125, -0.153125, -0.733, 0.6786, 0.0472,
+-0.328125, 0.13125, -0.08125, 0.8073, 0.5901, 0.0041,
+-0.309375, 0.10625, -0.175, 0.8073, 0.5901, 0.0041,
+-0.34375, 0.153125, -0.153125, 0.8073, 0.5901, 0.0041,
+0.309375, 0.10625, -0.175, 0.6844, -0.1711, -0.7088,
+0.34375, 0.153125, -0.153125, 0.6844, -0.1711, -0.7088,
+0.315625, -0.05, -0.13125, 0.6844, -0.1711, -0.7088,
+-0.315625, -0.05, -0.13125, -0.6844, -0.1711, -0.7088,
+-0.34375, 0.153125, -0.153125, -0.6844, -0.1711, -0.7088,
+-0.309375, 0.10625, -0.175, -0.6844, -0.1711, -0.7088,
+0.2375, -0.05, -0.065625, -0.3604, -0.8283, -0.429,
+0.25625, -0.003125, -0.171875, -0.3604, -0.8283, -0.429,
+0.315625, -0.05, -0.13125, -0.3604, -0.8283, -0.429,
+-0.315625, -0.05, -0.13125, 0.3604, -0.8283, -0.429,
+-0.25625, -0.003125, -0.171875, 0.3604, -0.8283, -0.429,
+-0.2375, -0.05, -0.065625, 0.3604, -0.8283, -0.429,
+];
diff --git a/aswebglue/examples/Obj/index.html b/aswebglue/examples/Obj/index.html
new file mode 100644
index 0000000..c534a58
--- /dev/null
+++ b/aswebglue/examples/Obj/index.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+ Wavefront Object converted to AssemblyScript
+
+
+
+ fps:
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/Obj/monkey.mtl b/aswebglue/examples/Obj/monkey.mtl
new file mode 100644
index 0000000..f231bdf
--- /dev/null
+++ b/aswebglue/examples/Obj/monkey.mtl
@@ -0,0 +1,10 @@
+# Blender MTL File: 'None'
+# Material Count: 1
+
+newmtl None
+Ns 500
+Ka 0.8 0.8 0.8
+Kd 0.8 0.8 0.8
+Ks 0.8 0.8 0.8
+d 1
+illum 2
diff --git a/aswebglue/examples/Obj/monkey.obj b/aswebglue/examples/Obj/monkey.obj
new file mode 100644
index 0000000..31e43ce
--- /dev/null
+++ b/aswebglue/examples/Obj/monkey.obj
@@ -0,0 +1,2979 @@
+# Blender v2.90.1 OBJ File: ''
+# www.blender.org
+mtllib monkey.mtl
+o Suzanne
+v 0.175000 0.065625 0.306250
+v -0.175000 0.065625 0.306250
+v 0.200000 0.037500 0.275000
+v -0.200000 0.037500 0.275000
+v 0.218750 0.021875 0.231250
+v -0.218750 0.021875 0.231250
+v 0.140625 -0.009375 0.246875
+v -0.140625 -0.009375 0.246875
+v 0.140625 0.012500 0.287500
+v -0.140625 0.012500 0.287500
+v 0.140625 0.053125 0.312500
+v -0.140625 0.053125 0.312500
+v 0.109375 0.065625 0.318750
+v -0.109375 0.065625 0.318750
+v 0.081250 0.037500 0.296875
+v -0.081250 0.037500 0.296875
+v 0.062500 0.021875 0.259375
+v -0.062500 0.021875 0.259375
+v 0.031250 0.096875 0.262500
+v -0.031250 0.096875 0.262500
+v 0.056250 0.096875 0.296875
+v -0.056250 0.096875 0.296875
+v 0.096875 0.096875 0.318750
+v -0.096875 0.096875 0.318750
+v 0.109375 0.131250 0.318750
+v -0.109375 0.131250 0.318750
+v 0.081250 0.156250 0.296875
+v -0.081250 0.156250 0.296875
+v 0.062500 0.175000 0.259375
+v -0.062500 0.175000 0.259375
+v 0.140625 0.206250 0.246875
+v -0.140625 0.206250 0.246875
+v 0.140625 0.181250 0.287500
+v -0.140625 0.181250 0.287500
+v 0.140625 0.143750 0.312500
+v -0.140625 0.143750 0.312500
+v 0.175000 0.131250 0.306250
+v -0.175000 0.131250 0.306250
+v 0.200000 0.156250 0.275000
+v -0.200000 0.156250 0.275000
+v 0.218750 0.175000 0.231250
+v -0.218750 0.175000 0.231250
+v 0.250000 0.096875 0.225000
+v -0.250000 0.096875 0.225000
+v 0.225000 0.096875 0.268750
+v -0.225000 0.096875 0.268750
+v 0.187500 0.096875 0.303125
+v -0.187500 0.096875 0.303125
+v 0.190625 0.096875 0.309375
+v -0.190625 0.096875 0.309375
+v 0.178125 0.134375 0.312500
+v -0.178125 0.134375 0.312500
+v 0.140625 0.150000 0.321875
+v -0.140625 0.150000 0.321875
+v 0.106250 0.134375 0.328125
+v -0.106250 0.134375 0.328125
+v 0.090625 0.096875 0.328125
+v -0.090625 0.096875 0.328125
+v 0.106250 0.062500 0.328125
+v -0.106250 0.062500 0.328125
+v 0.140625 0.096875 0.331250
+v -0.140625 0.096875 0.331250
+v 0.140625 0.046875 0.321875
+v -0.140625 0.046875 0.321875
+v 0.178125 0.062500 0.312500
+v -0.178125 0.062500 0.312500
+v 0.000000 0.171875 0.296875
+v 0.000000 0.140625 0.328125
+v 0.000000 -0.271875 0.293750
+v 0.000000 -0.128125 0.312500
+v 0.000000 -0.075000 0.318750
+v 0.000000 -0.309375 0.287500
+v 0.000000 0.162500 0.240625
+v 0.000000 0.228125 0.228125
+v 0.000000 0.359375 -0.218750
+v 0.000000 0.225000 -0.340625
+v 0.000000 0.028125 -0.331250
+v 0.000000 -0.153125 -0.140625
+v 0.081250 -0.075000 0.225000
+v -0.081250 -0.075000 0.225000
+v 0.125000 -0.175000 0.228125
+v -0.125000 -0.175000 0.228125
+v 0.140625 -0.278125 0.228125
+v -0.140625 -0.278125 0.228125
+v 0.146875 -0.356250 0.212500
+v -0.146875 -0.356250 0.212500
+v 0.131250 -0.378125 0.209375
+v -0.131250 -0.378125 0.209375
+v 0.071875 -0.387500 0.221875
+v -0.071875 -0.387500 0.221875
+v 0.000000 -0.393750 0.231250
+v 0.175000 -0.056250 0.212500
+v -0.175000 -0.056250 0.212500
+v 0.253125 -0.015625 0.215625
+v -0.253125 -0.015625 0.215625
+v 0.331250 0.059375 0.178125
+v -0.331250 0.059375 0.178125
+v 0.343750 0.171875 0.237500
+v -0.343750 0.171875 0.237500
+v 0.284375 0.193750 0.250000
+v -0.284375 0.193750 0.250000
+v 0.196875 0.240625 0.275000
+v -0.196875 0.240625 0.275000
+v 0.128125 0.303125 0.293750
+v -0.128125 0.303125 0.293750
+v 0.062500 0.287500 0.303125
+v -0.062500 0.287500 0.303125
+v 0.025000 0.196875 0.300000
+v -0.025000 0.196875 0.300000
+v 0.065625 0.165625 0.309375
+v -0.065625 0.165625 0.309375
+v 0.050000 0.121875 0.306250
+v -0.050000 0.121875 0.306250
+v 0.081250 0.037500 0.296875
+v -0.081250 0.037500 0.296875
+v 0.150000 0.006250 0.281250
+v -0.150000 0.006250 0.281250
+v 0.196875 0.025000 0.268750
+v -0.196875 0.025000 0.268750
+v 0.250000 0.075000 0.259375
+v -0.250000 0.075000 0.259375
+v 0.256250 0.118750 0.259375
+v -0.256250 0.118750 0.259375
+v 0.240625 0.150000 0.265625
+v -0.240625 0.150000 0.265625
+v 0.171875 0.175000 0.287500
+v -0.171875 0.175000 0.287500
+v 0.100000 0.187500 0.303125
+v -0.100000 0.187500 0.303125
+v 0.000000 -0.306250 0.293750
+v 0.043750 -0.287500 0.293750
+v -0.043750 -0.287500 0.293750
+v 0.046875 -0.334375 0.284375
+v -0.046875 -0.334375 0.284375
+v 0.025000 -0.353125 0.278125
+v -0.025000 -0.353125 0.278125
+v 0.000000 -0.356250 0.275000
+v 0.000000 -0.078125 0.300000
+v 0.000000 -0.056250 0.296875
+v 0.040625 -0.059375 0.296875
+v -0.040625 -0.059375 0.296875
+v 0.050000 -0.090625 0.300000
+v -0.050000 -0.090625 0.300000
+v 0.034375 -0.115625 0.296875
+v -0.034375 -0.115625 0.296875
+v 0.159375 -0.018750 0.268750
+v -0.159375 -0.018750 0.268750
+v 0.246875 0.021875 0.250000
+v -0.246875 0.021875 0.250000
+v 0.290625 0.081250 0.240625
+v -0.290625 0.081250 0.240625
+v 0.296875 0.150000 0.262500
+v -0.296875 0.150000 0.262500
+v 0.275000 0.165625 0.290625
+v -0.275000 0.165625 0.290625
+v 0.175000 0.218750 0.318750
+v -0.175000 0.218750 0.318750
+v 0.125000 0.256250 0.334375
+v -0.125000 0.256250 0.334375
+v 0.081250 0.246875 0.340625
+v -0.081250 0.246875 0.340625
+v 0.040625 0.171875 0.337500
+v -0.040625 0.171875 0.337500
+v 0.050000 -0.040625 0.325000
+v -0.050000 -0.040625 0.325000
+v 0.084375 -0.178125 0.284375
+v -0.084375 -0.178125 0.284375
+v 0.100000 -0.281250 0.275000
+v -0.100000 -0.281250 0.275000
+v 0.106250 -0.328125 0.265625
+v -0.106250 -0.328125 0.265625
+v 0.093750 -0.365625 0.253125
+v -0.093750 -0.365625 0.253125
+v 0.065625 -0.371875 0.253125
+v -0.065625 -0.371875 0.253125
+v 0.000000 -0.378125 0.256250
+v 0.000000 0.018750 0.290625
+v 0.000000 0.084375 0.306250
+v 0.131250 0.190625 0.296875
+v -0.131250 0.190625 0.296875
+v 0.065625 0.056250 0.300000
+v -0.065625 0.056250 0.300000
+v 0.053125 0.084375 0.303125
+v -0.053125 0.084375 0.303125
+v 0.046875 -0.275000 0.293750
+v -0.046875 -0.275000 0.293750
+v 0.031250 -0.178125 0.300000
+v -0.031250 -0.178125 0.300000
+v 0.000000 -0.178125 0.300000
+v 0.000000 -0.131250 0.296875
+v 0.037500 -0.109375 0.312500
+v -0.037500 -0.109375 0.312500
+v 0.053125 -0.090625 0.318750
+v -0.053125 -0.090625 0.318750
+v 0.043750 -0.053125 0.312500
+v -0.043750 -0.053125 0.312500
+v 0.015625 -0.050000 0.312500
+v -0.015625 -0.050000 0.312500
+v 0.000000 -0.081250 0.331250
+v 0.018750 -0.059375 0.325000
+v -0.018750 -0.059375 0.325000
+v 0.037500 -0.062500 0.325000
+v -0.037500 -0.062500 0.325000
+v 0.043750 -0.090625 0.331250
+v -0.043750 -0.090625 0.331250
+v 0.031250 -0.100000 0.321875
+v -0.031250 -0.100000 0.321875
+v 0.000000 -0.115625 0.321875
+v 0.103125 -0.125000 0.221875
+v -0.103125 -0.125000 0.221875
+v 0.065625 -0.096875 0.284375
+v -0.065625 -0.096875 0.284375
+v 0.071875 -0.125000 0.284375
+v -0.071875 -0.125000 0.284375
+v 0.093750 -0.100000 0.221875
+v -0.093750 -0.100000 0.221875
+v 0.000000 -0.350000 0.275000
+v 0.018750 -0.346875 0.275000
+v -0.018750 -0.346875 0.275000
+v 0.037500 -0.328125 0.284375
+v -0.037500 -0.328125 0.284375
+v 0.037500 -0.296875 0.290625
+v -0.037500 -0.296875 0.290625
+v 0.000000 -0.312500 0.262500
+v 0.037500 -0.300000 0.265625
+v -0.037500 -0.300000 0.265625
+v 0.037500 -0.325000 0.256250
+v -0.037500 -0.325000 0.256250
+v 0.018750 -0.340625 0.253125
+v -0.018750 -0.340625 0.253125
+v 0.000000 -0.343750 0.253125
+v 0.068750 0.087500 0.312500
+v -0.068750 0.087500 0.312500
+v 0.075000 0.062500 0.309375
+v -0.075000 0.062500 0.309375
+v 0.134375 0.171875 0.303125
+v -0.134375 0.171875 0.303125
+v 0.109375 0.168750 0.309375
+v -0.109375 0.168750 0.309375
+v 0.168750 0.159375 0.309375
+v -0.168750 0.159375 0.309375
+v 0.225000 0.140625 0.278125
+v -0.225000 0.140625 0.278125
+v 0.234375 0.115625 0.275000
+v -0.234375 0.115625 0.275000
+v 0.231250 0.078125 0.271875
+v -0.231250 0.078125 0.271875
+v 0.190625 0.040625 0.287500
+v -0.190625 0.040625 0.287500
+v 0.150000 0.025000 0.296875
+v -0.150000 0.025000 0.296875
+v 0.090625 0.043750 0.312500
+v -0.090625 0.043750 0.312500
+v 0.071875 0.118750 0.312500
+v -0.071875 0.118750 0.312500
+v 0.084375 0.150000 0.312500
+v -0.084375 0.150000 0.312500
+v 0.093750 0.143750 0.303125
+v -0.093750 0.143750 0.303125
+v 0.078125 0.118750 0.303125
+v -0.078125 0.118750 0.303125
+v 0.096875 0.050000 0.303125
+v -0.096875 0.050000 0.303125
+v 0.150000 0.034375 0.290625
+v -0.150000 0.034375 0.290625
+v 0.184375 0.046875 0.281250
+v -0.184375 0.046875 0.281250
+v 0.218750 0.084375 0.268750
+v -0.218750 0.084375 0.268750
+v 0.221875 0.112500 0.268750
+v -0.221875 0.112500 0.268750
+v 0.212500 0.134375 0.271875
+v -0.212500 0.134375 0.271875
+v 0.165625 0.156250 0.300000
+v -0.165625 0.156250 0.300000
+v 0.112500 0.159375 0.306250
+v -0.112500 0.159375 0.306250
+v 0.134375 0.162500 0.300000
+v -0.134375 0.162500 0.300000
+v 0.081250 0.068750 0.300000
+v -0.081250 0.068750 0.300000
+v 0.078125 0.090625 0.300000
+v -0.078125 0.090625 0.300000
+v 0.043750 0.184375 0.243750
+v -0.043750 0.184375 0.243750
+v 0.078125 0.265625 0.246875
+v -0.078125 0.265625 0.246875
+v 0.134375 0.275000 0.237500
+v -0.134375 0.275000 0.237500
+v 0.193750 0.221875 0.221875
+v -0.193750 0.221875 0.221875
+v 0.271875 0.181250 0.196875
+v -0.271875 0.181250 0.196875
+v 0.318750 0.162500 0.184375
+v -0.318750 0.162500 0.184375
+v 0.309375 0.065625 0.150000
+v -0.309375 0.065625 0.150000
+v 0.240625 0.000000 0.165625
+v -0.240625 0.000000 0.165625
+v 0.175000 -0.037500 0.187500
+v -0.175000 -0.037500 0.187500
+v 0.000000 0.359375 0.115625
+v 0.000000 0.393750 -0.031250
+v 0.000000 -0.078125 -0.268750
+v 0.000000 -0.184375 0.075000
+v 0.000000 -0.390625 0.184375
+v 0.000000 -0.321875 0.137500
+v 0.000000 -0.228125 0.128125
+v 0.000000 -0.193750 0.112500
+v 0.340625 0.093750 0.021875
+v -0.340625 0.093750 0.021875
+v 0.343750 0.128125 -0.018750
+v -0.343750 0.128125 -0.018750
+v 0.309375 0.106250 -0.175000
+v -0.309375 0.106250 -0.175000
+v 0.184375 0.175000 -0.281250
+v -0.184375 0.175000 -0.281250
+v 0.293750 -0.018750 0.028125
+v -0.293750 -0.018750 0.028125
+v 0.237500 -0.050000 -0.065625
+v -0.237500 -0.050000 -0.065625
+v 0.256250 -0.003125 -0.171875
+v -0.256250 -0.003125 -0.171875
+v 0.134375 0.021875 -0.265625
+v -0.134375 0.021875 -0.265625
+v 0.093750 -0.140625 0.162500
+v -0.093750 -0.140625 0.162500
+v 0.071875 -0.165625 0.103125
+v -0.071875 -0.165625 0.103125
+v 0.115625 -0.284375 0.153125
+v -0.115625 -0.284375 0.153125
+v 0.100000 -0.200000 0.156250
+v -0.100000 -0.200000 0.156250
+v 0.131250 -0.365625 0.159375
+v -0.131250 -0.365625 0.159375
+v 0.056250 -0.303125 0.146875
+v -0.056250 -0.303125 0.146875
+v 0.050000 -0.215625 0.143750
+v -0.050000 -0.215625 0.143750
+v 0.065625 -0.378125 0.175000
+v -0.065625 -0.378125 0.175000
+v 0.087500 -0.112500 0.171875
+v -0.087500 -0.112500 0.171875
+v 0.084375 -0.090625 0.187500
+v -0.084375 -0.090625 0.187500
+v 0.081250 -0.068750 0.200000
+v -0.081250 -0.068750 0.200000
+v 0.084375 -0.156250 0.065625
+v -0.084375 -0.156250 0.065625
+v 0.118750 -0.125000 -0.106250
+v -0.118750 -0.125000 -0.106250
+v 0.137500 -0.059375 -0.215625
+v -0.137500 -0.059375 -0.215625
+v 0.181250 0.346875 -0.153125
+v -0.181250 0.346875 -0.153125
+v 0.181250 0.371875 -0.028125
+v -0.181250 0.371875 -0.028125
+v 0.181250 0.340625 0.093750
+v -0.181250 0.340625 0.093750
+v 0.184375 0.209375 0.171875
+v -0.184375 0.209375 0.171875
+v 0.290625 0.162500 0.134375
+v -0.290625 0.162500 0.134375
+v 0.253125 0.181250 0.112500
+v -0.253125 0.181250 0.112500
+v 0.256250 0.281250 0.021875
+v -0.256250 0.281250 0.021875
+v 0.318750 0.225000 0.050000
+v -0.318750 0.225000 0.050000
+v 0.318750 0.246875 -0.046875
+v -0.318750 0.246875 -0.046875
+v 0.256250 0.300000 -0.078125
+v -0.256250 0.300000 -0.078125
+v 0.256250 0.271875 -0.178125
+v -0.256250 0.271875 -0.178125
+v 0.318750 0.215625 -0.143750
+v -0.318750 0.215625 -0.143750
+v 0.246875 0.131250 -0.234375
+v -0.246875 0.131250 -0.234375
+v 0.193750 0.009375 -0.218750
+v -0.193750 0.009375 -0.218750
+v 0.328125 0.131250 -0.081250
+v -0.328125 0.131250 -0.081250
+v 0.162500 -0.068750 0.059375
+v -0.162500 -0.068750 0.059375
+v 0.171875 -0.078125 -0.084375
+v -0.171875 -0.078125 -0.084375
+v 0.356250 0.162500 -0.093750
+v -0.356250 0.162500 -0.093750
+v 0.309375 -0.056250 -0.050000
+v -0.309375 -0.056250 -0.050000
+v 0.415625 -0.040625 -0.131250
+v -0.415625 -0.040625 -0.131250
+v 0.512500 0.021875 -0.171875
+v -0.512500 0.021875 -0.171875
+v 0.540625 0.128125 -0.168750
+v -0.540625 0.128125 -0.168750
+v 0.493750 0.203125 -0.168750
+v -0.493750 0.203125 -0.168750
+v 0.409375 0.190625 -0.125000
+v -0.409375 0.190625 -0.125000
+v 0.406250 0.165625 -0.115625
+v -0.406250 0.165625 -0.115625
+v 0.475000 0.175000 -0.156250
+v -0.475000 0.175000 -0.156250
+v 0.506250 0.115625 -0.162500
+v -0.506250 0.115625 -0.162500
+v 0.484375 0.031250 -0.162500
+v -0.484375 0.031250 -0.162500
+v 0.412500 -0.015625 -0.121875
+v -0.412500 -0.015625 -0.121875
+v 0.331250 -0.028125 -0.053125
+v -0.331250 -0.028125 -0.053125
+v 0.368750 0.143750 -0.087500
+v -0.368750 0.143750 -0.087500
+v 0.378125 0.121875 -0.115625
+v -0.378125 0.121875 -0.115625
+v 0.353125 -0.009375 -0.084375
+v -0.353125 -0.009375 -0.084375
+v 0.415625 0.000000 -0.146875
+v -0.415625 0.000000 -0.146875
+v 0.475000 0.037500 -0.178125
+v -0.475000 0.037500 -0.178125
+v 0.493750 0.100000 -0.178125
+v -0.493750 0.100000 -0.178125
+v 0.468750 0.143750 -0.175000
+v -0.468750 0.143750 -0.175000
+v 0.409375 0.137500 -0.143750
+v -0.409375 0.137500 -0.143750
+v 0.337500 0.115625 -0.084375
+v -0.337500 0.115625 -0.084375
+v 0.334375 0.068750 -0.109375
+v -0.334375 0.068750 -0.109375
+v 0.303125 0.037500 -0.109375
+v -0.303125 0.037500 -0.109375
+v 0.328125 0.034375 -0.109375
+v -0.328125 0.034375 -0.109375
+v 0.337500 0.006250 -0.109375
+v -0.337500 0.006250 -0.109375
+v 0.325000 -0.006250 -0.109375
+v -0.325000 -0.006250 -0.109375
+v 0.290625 0.000000 -0.028125
+v -0.290625 0.000000 -0.028125
+v 0.287500 -0.009375 -0.068750
+v -0.287500 -0.009375 -0.068750
+v 0.287500 0.015625 -0.075000
+v -0.287500 0.015625 -0.075000
+v 0.318750 0.081250 -0.084375
+v -0.318750 0.081250 -0.084375
+v 0.356250 0.096875 -0.106250
+v -0.356250 0.096875 -0.106250
+v 0.356250 0.093750 -0.128125
+v -0.356250 0.093750 -0.128125
+v 0.325000 -0.006250 -0.128125
+v -0.325000 -0.006250 -0.128125
+v 0.340625 0.006250 -0.128125
+v -0.340625 0.006250 -0.128125
+v 0.331250 0.031250 -0.128125
+v -0.331250 0.031250 -0.128125
+v 0.306250 0.037500 -0.128125
+v -0.306250 0.037500 -0.128125
+v 0.337500 0.068750 -0.128125
+v -0.337500 0.068750 -0.128125
+v 0.415625 0.131250 -0.165625
+v -0.415625 0.131250 -0.165625
+v 0.475000 0.137500 -0.193750
+v -0.475000 0.137500 -0.193750
+v 0.503125 0.096875 -0.196875
+v -0.503125 0.096875 -0.196875
+v 0.484375 0.034375 -0.193750
+v -0.484375 0.034375 -0.193750
+v 0.418750 0.000000 -0.168750
+v -0.418750 0.000000 -0.168750
+v 0.353125 -0.006250 -0.106250
+v -0.353125 -0.006250 -0.106250
+v 0.381250 0.115625 -0.137500
+v -0.381250 0.115625 -0.137500
+v 0.356250 0.043750 -0.131250
+v -0.356250 0.043750 -0.131250
+v 0.375000 0.025000 -0.134375
+v -0.375000 0.025000 -0.134375
+v 0.400000 0.050000 -0.146875
+v -0.400000 0.050000 -0.146875
+v 0.384375 0.068750 -0.140625
+v -0.384375 0.068750 -0.140625
+v 0.406250 0.093750 -0.150000
+v -0.406250 0.093750 -0.150000
+v 0.421875 0.075000 -0.153125
+v -0.421875 0.075000 -0.153125
+v 0.443750 0.084375 -0.156250
+v -0.443750 0.084375 -0.156250
+v 0.434375 0.109375 -0.156250
+v -0.434375 0.109375 -0.156250
+v 0.409375 0.175000 -0.193750
+v -0.409375 0.175000 -0.193750
+v 0.500000 0.187500 -0.218750
+v -0.500000 0.187500 -0.218750
+v 0.546875 0.118750 -0.200000
+v -0.546875 0.118750 -0.200000
+v 0.525000 0.021875 -0.212500
+v -0.525000 0.021875 -0.212500
+v 0.415625 -0.034375 -0.196875
+v -0.415625 -0.034375 -0.196875
+v 0.315625 -0.050000 -0.131250
+v -0.315625 -0.050000 -0.131250
+v 0.343750 0.153125 -0.153125
+v -0.343750 0.153125 -0.153125
+vt 0.890955 0.590063
+vt 0.860081 0.560115
+vt 0.904571 0.559404
+vt 0.856226 0.850547
+vt 0.888398 0.821999
+vt 0.900640 0.853232
+vt 0.853018 0.521562
+vt 0.920166 0.524546
+vt 0.847458 0.888748
+vt 0.914672 0.888748
+vt 0.798481 0.569535
+vt 0.795104 0.838402
+vt 0.870622 0.589649
+vt 0.828900 0.590771
+vt 0.826436 0.818537
+vt 0.868067 0.821510
+vt 0.854402 0.604754
+vt 0.828171 0.633354
+vt 0.827598 0.775964
+vt 0.852534 0.805700
+vt 0.791018 0.645443
+vt 0.791018 0.762238
+vt 0.855181 0.668527
+vt 0.856142 0.742025
+vt 0.844839 0.707525
+vt 0.854107 0.625459
+vt 0.853157 0.785002
+vt 0.867508 0.642291
+vt 0.900375 0.666964
+vt 0.901223 0.745592
+vt 0.867293 0.768782
+vt 0.842358 0.702491
+vt 0.921180 0.713713
+vt 0.931889 0.636832
+vt 0.918898 0.699697
+vt 0.931368 0.777093
+vt 0.968213 0.770220
+vt 0.905882 0.627902
+vt 0.890474 0.641909
+vt 0.904990 0.784860
+vt 0.906232 0.605742
+vt 0.904357 0.807013
+vt 0.931250 0.820926
+vt 0.933717 0.593037
+vt 0.968392 0.645333
+vt 0.965038 0.841671
+vt 0.968392 0.573812
+vt 0.889591 0.593275
+vt 0.887178 0.818729
+vt 0.900583 0.804677
+vt 0.902359 0.607909
+vt 0.898822 0.786233
+vt 0.899781 0.626257
+vt 0.890219 0.770183
+vt 0.887351 0.775442
+vt 0.887842 0.636527
+vt 0.870376 0.775972
+vt 0.859881 0.623942
+vt 0.870908 0.635245
+vt 0.858859 0.786774
+vt 0.859664 0.608186
+vt 0.857942 0.802505
+vt 0.871664 0.593961
+vt 0.869299 0.817249
+vt 0.879400 0.616512
+vt 0.878029 0.795063
+vt 0.536419 0.062072
+vt 0.518916 0.050294
+vt 0.540260 0.053805
+vt 0.501452 0.062043
+vt 0.518925 0.059681
+vt 0.542788 0.064089
+vt 0.551930 0.058338
+vt 0.495083 0.064047
+vt 0.497626 0.053770
+vt 0.555073 0.061900
+vt 0.482805 0.061829
+vt 0.485955 0.058273
+vt 0.563812 0.076586
+vt 0.546290 0.072669
+vt 0.491565 0.072625
+vt 0.474014 0.076511
+vt 0.583135 0.108495
+vt 0.548333 0.084893
+vt 0.489507 0.084858
+vt 0.454527 0.108481
+vt 0.605512 0.165134
+vt 0.621513 0.227818
+vt 0.553118 0.209599
+vt 0.416514 0.229490
+vt 0.432024 0.165644
+vt 0.485339 0.210053
+vt 0.676379 0.233241
+vt 0.647395 0.200502
+vt 0.360308 0.235899
+vt 0.372747 0.256357
+vt 0.683908 0.279995
+vt 0.664761 0.253225
+vt 0.353696 0.284606
+vt 0.707254 0.310054
+vt 0.715342 0.265392
+vt 0.330721 0.316853
+vt 0.351187 0.317440
+vt 0.697446 0.332673
+vt 0.687515 0.311539
+vt 0.341964 0.339667
+vt 0.362723 0.329722
+vt 0.662817 0.372521
+vt 0.676824 0.323937
+vt 0.379297 0.378686
+vt 0.402772 0.362131
+vt 0.618316 0.375151
+vt 0.639050 0.357330
+vt 0.424583 0.379267
+vt 0.604826 0.397804
+vt 0.626842 0.395792
+vt 0.439252 0.401540
+vt 0.442396 0.381222
+vt 0.553095 0.390512
+vt 0.600808 0.377857
+vt 0.490934 0.391862
+vt 0.482938 0.358497
+vt 0.521923 0.386009
+vt 0.559674 0.357011
+vt 0.521086 0.343868
+vt 0.599845 0.344815
+vt 0.577279 0.340156
+vt 0.441977 0.347815
+vt 0.615546 0.342005
+vt 0.634472 0.332311
+vt 0.425972 0.345582
+vt 0.662406 0.312804
+vt 0.406362 0.336480
+vt 0.668440 0.297958
+vt 0.377061 0.317685
+vt 0.664101 0.277872
+vt 0.370304 0.302644
+vt 0.639236 0.253047
+vt 0.374100 0.281778
+vt 0.613992 0.242662
+vt 0.398938 0.255633
+vt 0.572941 0.258564
+vt 0.424464 0.244473
+vt 0.519760 0.248864
+vt 0.466409 0.259709
+vt 0.558527 0.316594
+vt 0.482619 0.317843
+vt 0.520277 0.294764
+vt 0.556923 0.291214
+vt 0.483433 0.292249
+vt 0.563905 0.272007
+vt 0.475886 0.273078
+vt 0.525483 0.068967
+vt 0.512375 0.068956
+vt 0.531231 0.073829
+vt 0.506626 0.073811
+vt 0.531019 0.087431
+vt 0.555621 0.121749
+vt 0.532669 0.090920
+vt 0.505177 0.090908
+vt 0.482177 0.121781
+vt 0.506827 0.087416
+vt 0.518981 0.151749
+vt 0.532042 0.127713
+vt 0.538112 0.158382
+vt 0.505828 0.127728
+vt 0.518941 0.128358
+vt 0.518925 0.093952
+vt 0.518927 0.085180
+vt 0.548362 0.173560
+vt 0.535214 0.166808
+vt 0.502799 0.166857
+vt 0.489683 0.173693
+vt 0.499851 0.158434
+vt 0.544281 0.193366
+vt 0.537959 0.175966
+vt 0.500100 0.176033
+vt 0.493996 0.193428
+vt 0.528757 0.191785
+vt 0.519841 0.200843
+vt 0.509219 0.191626
+vt 0.500890 0.187571
+vt 0.519132 0.185382
+vt 0.517577 0.190607
+vt 0.518998 0.159028
+vt 0.519016 0.165599
+vt 0.506910 0.171667
+vt 0.528222 0.186316
+vt 0.509787 0.186260
+vt 0.533528 0.184215
+vt 0.537248 0.187577
+vt 0.504547 0.184206
+vt 0.504604 0.176791
+vt 0.531131 0.171631
+vt 0.533449 0.176739
+vt 0.519099 0.179457
+vt 0.561572 0.167779
+vt 0.476363 0.167996
+vt 0.478371 0.149447
+vt 0.559475 0.149319
+vt 0.596138 0.133426
+vt 0.441395 0.133592
+vt 0.601169 0.147885
+vt 0.436337 0.148194
+vt 0.528933 0.084957
+vt 0.508915 0.084945
+vt 0.518925 0.083865
+vt 0.529036 0.075429
+vt 0.508820 0.075415
+vt 0.523751 0.070508
+vt 0.514106 0.070501
+vt 0.518928 0.067899
+vt 0.518929 0.069468
+vt 0.518928 0.074259
+vt 0.516297 0.074966
+vt 0.524236 0.076691
+vt 0.521560 0.074970
+vt 0.513619 0.076684
+vt 0.524601 0.079886
+vt 0.513252 0.079879
+vt 0.518926 0.079331
+vt 0.571787 0.277295
+vt 0.568351 0.292904
+vt 0.468070 0.278617
+vt 0.471978 0.294282
+vt 0.573085 0.311386
+vt 0.467790 0.313081
+vt 0.584855 0.327708
+vt 0.456477 0.329961
+vt 0.458737 0.268049
+vt 0.611720 0.255725
+vt 0.580734 0.266620
+vt 0.427062 0.257728
+vt 0.632494 0.262853
+vt 0.406068 0.265508
+vt 0.653658 0.279971
+vt 0.384904 0.283634
+vt 0.656064 0.297636
+vt 0.383015 0.301864
+vt 0.386858 0.314615
+vt 0.652752 0.310186
+vt 0.411556 0.327673
+vt 0.614408 0.331972
+vt 0.629040 0.323864
+vt 0.426727 0.335361
+vt 0.601033 0.333624
+vt 0.440344 0.336537
+vt 0.601799 0.328453
+vt 0.439372 0.331331
+vt 0.450408 0.323919
+vt 0.613335 0.327083
+vt 0.427623 0.330358
+vt 0.626851 0.320513
+vt 0.413648 0.324175
+vt 0.646248 0.306421
+vt 0.393381 0.310510
+vt 0.649541 0.296225
+vt 0.389662 0.300183
+vt 0.647785 0.283486
+vt 0.391040 0.287071
+vt 0.629829 0.267263
+vt 0.408893 0.269959
+vt 0.612641 0.261560
+vt 0.426254 0.263693
+vt 0.585166 0.270991
+vt 0.454369 0.272583
+vt 0.578124 0.281900
+vt 0.461798 0.283441
+vt 0.579548 0.309340
+vt 0.590644 0.321516
+vt 0.461204 0.311233
+vt 0.577524 0.293776
+vt 0.462754 0.295432
+vt 0.553209 0.433063
+vt 0.523031 0.433628
+vt 0.492809 0.434538
+vt 0.609819 0.431516
+vt 0.435860 0.435740
+vt 0.416915 0.400552
+vt 0.396518 0.425416
+vt 0.648174 0.419316
+vt 0.350292 0.396229
+vt 0.692106 0.388274
+vt 0.312756 0.350588
+vt 0.735879 0.312112
+vt 0.726332 0.341754
+vt 0.301067 0.320593
+vt 0.320452 0.270303
+vt 0.304876 0.261087
+vt 0.698172 0.216906
+vt 0.729900 0.256393
+vt 0.337414 0.219179
+vt 0.663103 0.190671
+vt 0.373474 0.191872
+vt 0.649444 0.022378
+vt 0.621440 0.048089
+vt 0.626908 0.015608
+vt 0.388827 0.021586
+vt 0.416419 0.047631
+vt 0.376796 0.075296
+vt 0.577206 0.032801
+vt 0.567460 0.000144
+vt 0.411318 0.015131
+vt 0.460782 0.032656
+vt 0.547413 0.041724
+vt 0.518922 0.024886
+vt 0.470636 0.000144
+vt 0.490511 0.041669
+vt 0.558059 0.053871
+vt 0.479842 0.053785
+vt 0.576951 0.057998
+vt 0.460920 0.057845
+vt 0.611687 0.078268
+vt 0.425932 0.077985
+vt 0.660451 0.076084
+vt 0.626663 0.111357
+vt 0.410618 0.111244
+vt 0.629482 0.130456
+vt 0.407648 0.130594
+vt 0.413741 0.147158
+vt 0.619303 0.159841
+vt 0.418035 0.160361
+vt 0.389677 0.201890
+vt 0.886245 0.121777
+vt 0.891780 0.036916
+vt 0.945900 0.079569
+vt 0.141314 0.112482
+vt 0.142277 0.021467
+vt 0.183115 0.092127
+vt 0.849114 0.099732
+vt 0.805584 0.010786
+vt 0.232648 0.003484
+vt 0.246353 0.076510
+vt 0.687018 0.077204
+vt 0.672384 0.022201
+vt 0.349875 0.075955
+vt 0.365979 0.020991
+vt 0.760215 0.193244
+vt 0.789046 0.233323
+vt 0.271553 0.193871
+vt 0.241255 0.236977
+vt 0.909112 0.183261
+vt 0.994525 0.167705
+vt 0.107928 0.179083
+vt 0.078961 0.060719
+vt 0.862868 0.338556
+vt 0.962901 0.344752
+vt 0.911671 0.402429
+vt 0.160557 0.356821
+vt 0.043968 0.367038
+vt 0.123776 0.315519
+vt 0.915360 0.259804
+vt 0.999856 0.254640
+vt 0.098965 0.266968
+vt 0.000144 0.259113
+vt 0.011829 0.155367
+vt 0.749542 0.334683
+vt 0.766337 0.300809
+vt 0.789162 0.313727
+vt 0.267408 0.310142
+vt 0.288183 0.346496
+vt 0.242992 0.325552
+vt 0.815314 0.276388
+vt 0.846174 0.293397
+vt 0.213065 0.285164
+vt 0.178537 0.304983
+vt 0.845007 0.256352
+vt 0.873517 0.265922
+vt 0.179662 0.263312
+vt 0.147089 0.274284
+vt 0.859075 0.228168
+vt 0.886999 0.233769
+vt 0.162803 0.231720
+vt 0.131514 0.237587
+vt 0.875030 0.184705
+vt 0.842355 0.195160
+vt 0.145224 0.182749
+vt 0.894128 0.301884
+vt 0.794286 0.364062
+vt 0.770185 0.379538
+vt 0.239776 0.382592
+vt 0.845499 0.449967
+vt 0.106400 0.432652
+vt 0.815858 0.445381
+vt 0.755700 0.418603
+vt 0.287033 0.442912
+vt 0.219260 0.477186
+vt 0.268122 0.398737
+vt 0.185281 0.484099
+vt 0.819845 0.468071
+vt 0.215894 0.503605
+vt 0.809631 0.233887
+vt 0.219168 0.237388
+vt 0.829287 0.219562
+vt 0.199067 0.222464
+vt 0.788458 0.080826
+vt 0.715482 0.139727
+vt 0.319538 0.139409
+vt 0.246666 0.114850
+vt 0.785486 0.152330
+vt 0.245969 0.151002
+vt 0.623495 0.146796
+vt 0.837382 0.156361
+vt 0.196622 0.155241
+vt 0.171653 0.132294
+vt 0.786480 0.117591
+vt 0.858171 0.137775
+vt 0.432388 0.894943
+vt 0.491058 0.881714
+vt 0.506166 0.904851
+vt 0.321637 0.893225
+vt 0.263032 0.878321
+vt 0.315867 0.868209
+vt 0.572792 0.860484
+vt 0.604825 0.879946
+vt 0.181486 0.854693
+vt 0.247207 0.901159
+vt 0.148729 0.873349
+vt 0.619962 0.791615
+vt 0.136063 0.784093
+vt 0.169745 0.787474
+vt 0.586396 0.793977
+vt 0.563786 0.739211
+vt 0.194086 0.733241
+vt 0.208656 0.740879
+vt 0.549027 0.746412
+vt 0.508270 0.697693
+vt 0.250811 0.693249
+vt 0.258399 0.707497
+vt 0.438641 0.680683
+vt 0.434803 0.658882
+vt 0.320962 0.677959
+vt 0.325318 0.656224
+vt 0.500314 0.711729
+vt 0.452955 0.700023
+vt 0.306136 0.696976
+vt 0.505666 0.730944
+vt 0.252524 0.726592
+vt 0.568148 0.787367
+vt 0.188269 0.781375
+vt 0.214575 0.750414
+vt 0.555495 0.826352
+vt 0.199850 0.820889
+vt 0.501231 0.844356
+vt 0.253846 0.840502
+vt 0.457832 0.840040
+vt 0.297562 0.837358
+vt 0.783193 0.187449
+vt 0.246955 0.187075
+vt 0.233625 0.175620
+vt 0.394766 0.686125
+vt 0.391039 0.611891
+vt 0.364838 0.684445
+vt 0.391747 0.862097
+vt 0.438797 0.870229
+vt 0.363377 0.861308
+vt 0.435018 0.718280
+vt 0.323658 0.715731
+vt 0.384658 0.710299
+vt 0.433669 0.729661
+vt 0.374400 0.708969
+vt 0.410995 0.747662
+vt 0.427812 0.742828
+vt 0.324726 0.727177
+vt 0.347028 0.745816
+vt 0.330270 0.740536
+vt 0.384657 0.795423
+vt 0.418086 0.784946
+vt 0.372270 0.794472
+vt 0.431333 0.817535
+vt 0.401605 0.841460
+vt 0.324790 0.815460
+vt 0.338952 0.783073
+vt 0.354026 0.840297
+vt 0.825107 0.209762
+vt 0.199767 0.214827
+vt 0.816266 0.203086
+vt 0.209828 0.206161
+vt 0.226485 0.183086
+vt 0.796021 0.176969
+vt 0.802192 0.184609
+vt 0.448505 0.804621
+vt 0.473386 0.824700
+vt 0.307886 0.802031
+vt 0.282357 0.821525
+vt 0.321237 0.777208
+vt 0.423718 0.754191
+vt 0.435868 0.779569
+vt 0.334089 0.752045
+vt 0.319919 0.747250
+vt 0.437950 0.749777
+vt 0.312907 0.729222
+vt 0.440995 0.724383
+vt 0.445392 0.731997
+vt 0.317510 0.721697
+vt 0.455277 0.713731
+vt 0.303460 0.710657
+vt 0.512485 0.828811
+vt 0.242975 0.824574
+vt 0.550942 0.811814
+vt 0.204839 0.806417
+vt 0.552139 0.787682
+vt 0.204331 0.782156
+vt 0.539407 0.764539
+vt 0.542850 0.755753
+vt 0.217774 0.759319
+vt 0.508439 0.743135
+vt 0.249419 0.738732
+vt 0.454776 0.761665
+vt 0.302729 0.758742
+vt 0.286960 0.745020
+vt 0.470841 0.748408
+vt 0.475403 0.783904
+vt 0.281439 0.780511
+vt 0.268291 0.766661
+vt 0.503673 0.787562
+vt 0.494476 0.802470
+vt 0.252972 0.783410
+vt 0.261790 0.798626
+vt 0.516802 0.807339
+vt 0.239243 0.802891
+vt 0.237920 0.787045
+vt 0.518562 0.791602
+vt 0.484068 0.628776
+vt 0.543385 0.683538
+vt 0.276936 0.625067
+vt 0.216123 0.678120
+vt 0.581052 0.726933
+vt 0.177176 0.720426
+vt 0.616701 0.759965
+vt 0.140379 0.752377
+vt 0.660647 0.741167
+vt 0.707492 0.759884
+vt 0.097038 0.732052
+vt 0.677256 0.670436
+vt 0.745511 0.652100
+vt 0.049526 0.748824
+vt 0.083564 0.662038
+vt 0.671403 0.592656
+vt 0.740843 0.572428
+vt 0.019409 0.639749
+vt 0.092820 0.589862
+vt 0.834705 0.206959
+vt 0.051216 0.522659
+vt 0.033664 0.564403
+vt 0.620420 0.565675
+vt 0.498072 0.552315
+vt 0.145041 0.562595
+vt 0.264218 0.550140
+vt 0.369913 0.610196
+vt 0.464579 0.342230
+vt 0.176788 0.196179
+vt 0.770572 0.444261
+vt 0.271364 0.473316
+vt 0.488870 0.770464
+vt 0.834578 0.206879
+vn 0.6617 -0.2026 0.7219
+vn -0.6617 -0.2026 0.7219
+vn 0.8268 -0.3051 0.4725
+vn -0.8268 -0.3051 0.4725
+vn 0.4076 -0.7905 0.4570
+vn -0.4076 -0.7905 0.4570
+vn 0.3791 -0.5163 0.7679
+vn -0.3791 -0.5163 0.7679
+vn -0.0859 -0.5222 0.8485
+vn 0.0859 -0.5222 0.8485
+vn -0.2664 -0.8487 0.4570
+vn 0.2664 -0.8487 0.4570
+vn -0.7824 -0.3294 0.5285
+vn 0.7606 -0.3400 0.5531
+vn -0.4706 -0.1981 0.8598
+vn 0.4706 -0.1981 0.8598
+vn -0.4649 0.1958 0.8634
+vn 0.4649 0.1958 0.8634
+vn -0.7656 0.3223 0.5568
+vn 0.7683 0.3293 0.5488
+vn -0.2560 0.8073 0.5317
+vn 0.2487 0.8249 0.5076
+vn -0.0821 0.6023 0.7940
+vn 0.1017 0.5518 0.8277
+vn 0.3329 0.5231 0.7846
+vn -0.3861 0.5446 0.7445
+vn 0.4246 0.7711 0.4745
+vn -0.4059 0.7641 0.5014
+vn 0.8251 0.2968 0.4808
+vn -0.8299 0.2940 0.4742
+vn 0.6888 0.1868 0.7005
+vn -0.6617 0.2026 0.7219
+vn 0.8400 0.3436 -0.4200
+vn -0.7816 0.3058 -0.5437
+vn 0.2074 0.8296 -0.5185
+vn -0.2037 0.8146 -0.5431
+vn -0.4056 0.7605 -0.5070
+vn 0.4381 0.7988 -0.4123
+vn -0.8642 0.3143 -0.3928
+vn 0.7861 0.3276 -0.5241
+vn -0.7783 -0.3537 -0.5188
+vn 0.7783 -0.3537 -0.5188
+vn -0.4381 -0.7988 -0.4123
+vn 0.4381 -0.7988 -0.4123
+vn 0.2037 -0.8146 -0.5431
+vn -0.2037 -0.8146 -0.5431
+vn 0.7683 -0.3293 -0.5488
+vn -0.7683 -0.3293 -0.5488
+vn 0.4000 -0.0623 0.9144
+vn -0.4000 -0.0623 0.9144
+vn 0.3069 -0.1754 0.9354
+vn -0.3069 -0.1754 0.9354
+vn 0.0945 -0.1835 0.9785
+vn -0.0945 -0.1835 0.9785
+vn -0.0624 -0.0283 0.9977
+vn 0.0624 -0.0283 0.9977
+vn -0.0624 0.0260 0.9977
+vn 0.0624 0.0260 0.9977
+vn 0.0996 0.1729 0.9799
+vn -0.0996 0.1729 0.9799
+vn 0.3036 0.1656 0.9383
+vn -0.3036 0.1656 0.9383
+vn 0.4002 0.0572 0.9147
+vn -0.4002 0.0572 0.9147
+vn 0.1367 -0.8748 0.4648
+vn -0.1054 -0.8433 0.5270
+vn 0.2303 -0.8656 0.4447
+vn -0.1916 -0.8620 0.4693
+vn 0.5788 -0.5049 0.6404
+vn -0.5788 -0.5049 0.6404
+vn 0.7763 -0.0633 0.6272
+vn -0.7763 -0.0633 0.6272
+vn 0.7471 0.1132 0.6550
+vn -0.7471 0.1132 0.6550
+vn 0.3747 -0.8345 0.4040
+vn -0.3747 -0.8345 0.4040
+vn 0.3557 -0.7290 0.5848
+vn -0.4177 -0.5751 0.7034
+vn 0.6947 -0.4197 0.5841
+vn -0.6947 -0.4197 0.5841
+vn 0.7028 -0.3915 0.5939
+vn -0.5537 -0.2978 0.7777
+vn 0.3127 0.3425 0.8860
+vn -0.8227 0.3606 0.4395
+vn 0.5091 0.6482 0.5663
+vn -0.5041 0.6448 0.5745
+vn 0.5977 0.5565 0.5771
+vn -0.5977 0.5565 0.5771
+vn -0.0486 0.6560 0.7532
+vn 0.0371 0.6685 0.7428
+vn -0.7104 0.2715 0.6494
+vn 0.7386 0.3768 0.5590
+vn -0.6013 0.5262 0.6013
+vn 0.5774 0.5774 0.5774
+vn 0.5070 -0.6281 0.5903
+vn -0.5364 -0.3230 0.7797
+vn 0.2226 -0.4694 0.8545
+vn -0.2226 -0.4694 0.8545
+vn -0.0348 -0.5792 0.8144
+vn 0.1073 -0.5010 0.8588
+vn -0.0899 -0.7843 0.6138
+vn 0.0770 -0.5759 0.8139
+vn 0.0547 -0.1695 0.9840
+vn -0.0279 -0.8645 0.5019
+vn 0.4260 -0.0609 0.9027
+vn -0.1687 -0.3128 0.9347
+vn 0.3352 -0.1828 0.9243
+vn -0.4350 -0.1812 0.8820
+vn 0.3579 -0.3068 0.8819
+vn -0.3223 -0.2762 0.9054
+vn 0.3069 0.2113 0.9280
+vn -0.4815 -0.2408 0.8427
+vn -0.1598 0.3903 0.9067
+vn 0.1598 0.3903 0.9067
+vn 0.6819 -0.2915 0.6709
+vn -0.1854 -0.4956 0.8485
+vn 0.0585 -0.0781 0.9952
+vn -0.0585 -0.0781 0.9952
+vn -0.0066 -0.2316 0.9728
+vn -0.0585 -0.0845 0.9947
+vn 0.1008 -0.7103 0.6966
+vn -0.1008 -0.7103 0.6966
+vn 0.1322 -0.5947 0.7930
+vn -0.1322 -0.5947 0.7930
+vn 0.3128 -0.1662 0.9352
+vn -0.3143 -0.3928 0.8642
+vn 0.3288 -0.0360 0.9437
+vn -0.3288 -0.0360 0.9437
+vn 0.3233 -0.0808 0.9429
+vn -0.3233 -0.0808 0.9429
+vn -0.0232 0.0511 0.9984
+vn 0.0000 0.0665 0.9978
+vn -0.0043 -0.0651 0.9979
+vn 0.0000 -0.0665 0.9978
+vn 0.0000 0.0000 1.0000
+vn 0.8447 -0.5335 0.0445
+vn -0.8447 -0.5335 0.0445
+vn 0.9500 0.2692 -0.1583
+vn -0.9500 0.2692 -0.1583
+vn 0.0693 0.9004 -0.4294
+vn -0.1018 0.9165 -0.3870
+vn -1.0000 0.0000 0.0000
+vn 0.6905 0.5492 0.4708
+vn 0.4071 -0.8956 0.1791
+vn -0.4319 -0.8639 0.2592
+vn 0.2873 -0.5747 0.7663
+vn -0.2873 -0.5747 0.7663
+vn -0.6326 0.5353 0.5596
+vn 0.6326 0.5353 0.5596
+vn 0.0862 0.7759 0.6250
+vn -0.0862 0.7759 0.6250
+vn 0.7532 0.2870 0.5918
+vn -0.7639 0.2971 0.5729
+vn 0.3416 -0.5409 0.7686
+vn -0.3416 -0.5409 0.7686
+vn 0.0502 0.2343 0.9709
+vn -0.0375 0.2247 0.9737
+vn -0.1304 -0.6087 0.7826
+vn 0.1304 -0.6087 0.7826
+vn -0.5059 0.0716 0.8596
+vn 0.5059 0.0716 0.8596
+vn -0.5774 -0.5773 0.5773
+vn 0.5774 -0.5773 0.5773
+vn 0.5460 -0.4310 0.7184
+vn -0.3319 0.0738 0.9404
+vn 0.3231 0.0311 0.9459
+vn -0.2815 0.0662 0.9573
+vn 0.7357 0.3910 0.5531
+vn -0.8753 0.2059 0.4376
+vn 0.8480 0.3180 0.4240
+vn -0.8973 0.1994 0.3938
+vn 0.8505 0.3798 0.3638
+vn -0.8505 0.3798 0.3638
+vn 0.1783 -0.4161 0.8917
+vn -0.2524 -0.8655 0.4327
+vn -0.1296 -0.1945 0.9723
+vn 0.1296 -0.1945 0.9723
+vn -0.4472 0.0000 0.8944
+vn 0.4472 0.0000 0.8944
+vn -0.1582 0.9494 0.2713
+vn 0.1582 0.9494 0.2713
+vn -0.6463 0.7337 0.2096
+vn 0.6463 0.7337 0.2096
+vn 1.0000 0.0000 0.0000
+vn 0.3051 -0.9450 0.1181
+vn -0.3051 -0.9450 0.1181
+vn 0.0217 -0.3031 0.9527
+vn -0.0217 -0.3031 0.9527
+vn 0.1353 -0.3479 0.9277
+vn -0.1353 -0.3479 0.9277
+vn -0.4681 -0.2239 0.8548
+vn 0.4681 -0.2239 0.8548
+vn -0.2710 0.0271 0.9622
+vn 0.2710 0.0271 0.9622
+vn -0.1717 -0.0090 0.9851
+vn 0.2595 0.1038 0.9601
+vn -0.4332 -0.4874 0.7581
+vn 0.6684 -0.4595 0.5849
+vn -0.1599 -0.8797 0.4478
+vn 0.1599 -0.8797 0.4478
+vn 0.3900 -0.5895 0.7074
+vn -0.3900 -0.5895 0.7074
+vn 0.6547 -0.4589 0.6007
+vn -0.6547 -0.4589 0.6007
+vn 0.5378 -0.1144 0.8353
+vn -0.5378 -0.1144 0.8353
+vn 0.5657 0.1197 0.8159
+vn -0.5774 0.1155 0.8083
+vn 0.4082 0.4082 0.8165
+vn -0.5214 0.6574 0.5441
+vn 0.1796 0.7882 0.5886
+vn -0.1796 0.7882 0.5886
+vn 0.1881 0.3387 0.9219
+vn -0.1881 0.3387 0.9219
+vn -0.0870 0.2756 0.9573
+vn 0.0870 0.2756 0.9573
+vn 0.2804 -0.2181 0.9348
+vn -0.3553 -0.5739 0.7379
+vn 0.3015 -0.3015 0.9045
+vn -0.3015 -0.3015 0.9045
+vn -0.3766 -0.8339 0.4035
+vn 0.0631 -0.3156 0.9468
+vn 0.0823 -0.7822 0.6175
+vn 0.2016 -0.9071 0.3696
+vn -0.3707 -0.2851 0.8839
+vn 0.3707 -0.2851 0.8839
+vn -0.2692 -0.0577 0.9614
+vn 0.4568 0.0508 0.8881
+vn -0.2797 0.5245 0.8042
+vn 0.2797 0.5245 0.8042
+vn -0.0213 0.5546 0.8319
+vn 0.0487 0.6815 0.7302
+vn 0.3778 0.6342 0.6746
+vn -0.3378 0.5221 0.7831
+vn 0.4988 0.5300 0.6858
+vn -0.4988 0.5300 0.6858
+vn 0.5425 -0.3391 0.7686
+vn -0.5425 -0.3391 0.7686
+vn 0.8305 -0.0615 0.5537
+vn -0.8305 -0.0615 0.5537
+vn 0.7814 0.1116 0.6140
+vn -0.7814 0.1116 0.6140
+vn -0.4338 0.8888 -0.1481
+vn 0.4338 0.8888 -0.1481
+vn -0.8515 0.3744 -0.3670
+vn 0.8515 0.3744 -0.3670
+vn -0.2664 0.8710 -0.4127
+vn 0.2197 0.8626 -0.4557
+vn 0.5932 0.7445 -0.3063
+vn -0.5914 0.7489 -0.2991
+vn 0.3714 0.8685 -0.3284
+vn -0.3653 0.8833 -0.2938
+vn 0.2901 0.9141 -0.2833
+vn -0.2901 0.9141 -0.2833
+vn 0.8873 0.1343 -0.4412
+vn -0.7964 0.1323 -0.5901
+vn 0.5108 -0.6649 -0.5450
+vn -0.5108 -0.6649 -0.5450
+vn 0.3695 -0.8566 -0.3601
+vn -0.3695 -0.8566 -0.3601
+vn 0.3617 -0.3858 -0.8487
+vn -0.1649 -0.6644 -0.7289
+vn 0.1952 -0.0976 -0.9759
+vn -0.3011 -0.0125 -0.9535
+vn -0.0107 -0.5633 -0.8262
+vn -0.2562 -0.3112 -0.9152
+vn 0.1533 -0.9649 -0.2134
+vn -0.1533 -0.9649 -0.2134
+vn 0.1260 -0.9624 -0.2406
+vn -0.1260 -0.9624 -0.2406
+vn 0.9396 0.1573 -0.3041
+vn -0.9396 0.1573 -0.3041
+vn 0.9278 0.1838 -0.3246
+vn -0.9278 0.1838 -0.3246
+vn 0.2192 0.0766 -0.9727
+vn -0.2192 0.0766 -0.9727
+vn 0.1211 -0.0530 -0.9912
+vn 0.1497 -0.3635 -0.9195
+vn 0.9094 0.1371 -0.3927
+vn -0.3706 -0.6780 -0.6349
+vn 0.9202 0.1355 -0.3672
+vn -0.9202 0.1355 -0.3672
+vn 0.9173 0.3440 -0.2007
+vn -0.9457 0.2673 -0.1850
+vn 0.9004 0.3642 -0.2380
+vn -0.9337 0.2813 -0.2215
+vn 0.8945 0.4337 0.1084
+vn -0.9501 0.2455 -0.1922
+vn 0.1596 -0.9577 -0.2394
+vn -0.1835 -0.7864 -0.5898
+vn 0.3693 -0.4712 -0.8010
+vn -0.3727 -0.4759 -0.7966
+vn 0.2986 -0.8236 -0.4821
+vn -0.3263 -0.8342 -0.4446
+vn 0.2995 -0.9442 -0.1368
+vn -0.2995 -0.9442 -0.1368
+vn 0.3287 -0.9163 -0.2291
+vn -0.3287 -0.9163 -0.2291
+vn 0.8305 0.3333 -0.4463
+vn -0.8642 -0.4737 0.1696
+vn 0.9166 -0.3740 0.1414
+vn -0.9166 -0.3740 0.1414
+vn 0.2950 -0.0454 -0.9544
+vn -0.4189 -0.2265 -0.8793
+vn 0.1272 0.9658 0.2260
+vn -0.1119 0.9626 0.2468
+vn 0.1320 0.9750 -0.1788
+vn -0.1320 0.9750 -0.1788
+vn 0.3878 0.6192 -0.6828
+vn -0.3878 0.6192 -0.6828
+vn 0.4951 0.8618 -0.1100
+vn -0.4951 0.8618 -0.1100
+vn 0.2561 0.6447 0.7202
+vn -0.2561 0.6447 0.7202
+vn 0.5966 0.7888 0.1479
+vn -0.5966 0.7888 0.1479
+vn 0.7125 0.6755 -0.1900
+vn -0.7125 0.6755 -0.1900
+vn 0.7104 0.1364 -0.6904
+vn -0.6304 0.2517 -0.7343
+vn 0.6823 0.2318 -0.6933
+vn -0.6823 0.2318 -0.6933
+vn 0.6574 0.7254 -0.2040
+vn -0.6574 0.7254 -0.2040
+vn 0.7289 0.6729 0.1262
+vn -0.7289 0.6729 0.1262
+vn 0.7791 0.4074 0.4764
+vn -0.7791 0.4074 0.4764
+vn 0.3669 0.8840 -0.2898
+vn -0.3238 0.9434 -0.0720
+vn 0.2854 0.6237 0.7277
+vn -0.1548 0.5080 0.8473
+vn -0.1681 0.1005 -0.9806
+vn 0.1681 0.1005 -0.9806
+vn 0.2925 0.5674 0.7697
+vn -0.2925 0.5674 0.7697
+vn -0.1616 0.1847 0.9694
+vn 0.1616 0.1847 0.9694
+vn 0.8681 0.0893 -0.4883
+vn -0.9340 0.2255 0.2773
+vn 0.9276 0.0762 0.3657
+vn -0.9276 0.0762 0.3657
+vn 0.9750 0.2169 0.0490
+vn -0.9750 0.2169 0.0490
+vn 0.9817 -0.0304 -0.1882
+vn -0.9956 0.0893 -0.0288
+vn 0.7466 -0.6646 0.0285
+vn -0.6374 -0.7651 0.0915
+vn 0.3723 -0.9243 0.0847
+vn -0.3720 -0.9244 0.0845
+vn 0.3986 -0.8754 0.2734
+vn -0.3986 -0.8754 0.2734
+vn 0.6328 -0.7642 0.1247
+vn -0.6328 -0.7642 0.1247
+vn 0.7325 -0.6368 0.2407
+vn -0.7325 -0.6368 0.2407
+vn 0.2637 -0.4499 0.8533
+vn -0.2637 -0.4499 0.8533
+vn 0.5881 -0.3070 -0.7483
+vn -0.5236 -0.3290 -0.7859
+vn 0.4694 -0.2400 -0.8498
+vn -0.5396 -0.3343 -0.7727
+vn 0.4463 -0.8452 -0.2941
+vn -0.2144 -0.8341 -0.5082
+vn 0.6973 -0.6610 -0.2771
+vn -0.7365 -0.6154 -0.2808
+vn 0.4972 -0.4408 -0.7473
+vn -0.4972 -0.4408 -0.7473
+vn 0.3691 0.2855 0.8844
+vn -0.3244 0.4867 0.8111
+vn 0.4467 0.0975 0.8894
+vn -0.4467 0.0975 0.8894
+vn 0.3188 0.1993 0.9266
+vn -0.1817 -0.0079 0.9833
+vn 0.2076 -0.0836 0.9746
+vn -0.2925 -0.0758 0.9533
+vn 0.3398 0.0824 0.9369
+vn -0.5847 -0.2198 0.7809
+vn 0.5957 -0.3850 0.7049
+vn -0.5957 -0.3850 0.7049
+vn 0.4843 0.5580 0.6738
+vn -0.4843 0.5580 0.6738
+vn -0.2675 0.8318 0.4864
+vn 0.2675 0.8318 0.4864
+vn -0.8576 0.2223 0.4637
+vn 0.7885 0.2366 0.5677
+vn -0.5257 -0.3579 0.7717
+vn 0.5242 -0.3548 0.7742
+vn 0.4663 -0.5991 0.6509
+vn -0.4390 -0.5252 0.7290
+vn 0.7104 -0.4567 0.5356
+vn -0.7104 -0.4567 0.5356
+vn 0.7507 -0.6131 -0.2461
+vn -0.6302 -0.7658 0.1282
+vn -0.1788 0.2923 0.9395
+vn 0.2175 0.2733 0.9370
+vn 0.9042 -0.3578 -0.2332
+vn -0.9042 -0.3578 -0.2332
+vn 0.0400 0.3399 0.9396
+vn -0.0400 0.3399 0.9396
+vn 0.2734 0.9064 0.3221
+vn -0.2734 0.9064 0.3221
+vn 0.4480 -0.4480 0.7737
+vn -0.7177 0.1689 0.6755
+vn 0.5534 -0.5534 0.6225
+vn -0.9008 -0.4075 0.1501
+vn 0.5724 -0.3122 0.7582
+vn -0.5815 -0.5217 0.6243
+vn 0.5597 -0.5533 0.6169
+vn -0.6138 -0.2571 0.7465
+vn 0.8271 0.5323 -0.1802
+vn -0.8271 0.5323 -0.1802
+vn 0.9227 -0.3765 -0.0825
+vn -0.8717 -0.4446 -0.2063
+vn 0.9972 -0.0181 -0.0725
+vn -0.9972 -0.0181 -0.0725
+vn 0.6895 -0.6644 0.2883
+vn -0.6895 -0.6644 0.2883
+vn 0.7815 -0.6176 0.0882
+vn -0.7930 -0.5947 0.1322
+vn 0.7022 -0.7022 0.1170
+vn -0.7022 -0.7022 0.1170
+vn 0.1240 0.9921 0.0207
+vn -0.2408 0.9631 -0.1204
+vn 0.9435 0.3145 0.1048
+vn -0.9251 0.3469 0.1542
+vn 0.6213 -0.7767 0.1036
+vn -0.6213 -0.7767 0.1036
+vn 0.0000 1.0000 0.0000
+vn 0.6197 -0.6899 0.3742
+vn -0.6197 -0.6899 0.3742
+vn 0.2752 -0.8808 0.3853
+vn -0.2752 -0.8808 0.3853
+vn -0.7929 -0.5252 -0.3089
+vn 0.7929 -0.5252 -0.3089
+vn -0.8096 0.2429 -0.5343
+vn 0.8538 0.2328 -0.4657
+vn -0.5621 0.8231 -0.0803
+vn 0.5433 0.6985 -0.4657
+vn -0.0071 0.9899 0.1414
+vn 0.1096 0.9939 -0.0157
+vn 0.1046 0.0392 0.9937
+vn -0.1738 0.0097 0.9847
+vn 0.2461 0.0852 0.9655
+vn -0.4134 0.0413 0.9096
+vn 0.3009 0.0926 0.9491
+vn -0.3009 0.0926 0.9491
+vn 0.2104 0.0124 0.9775
+vn -0.1220 0.0458 0.9915
+vn -0.0099 0.3867 0.9221
+vn 0.0099 0.3867 0.9221
+vn 0.3787 -0.0364 0.9248
+vn -0.4244 -0.0320 0.9049
+vn 0.2530 -0.1897 0.9487
+vn -0.2570 0.0723 0.9637
+vn -0.4870 0.6088 0.6262
+vn 0.2981 0.7454 0.5963
+vn 0.6693 0.1802 0.7208
+vn -0.6693 0.1802 0.7208
+vn 0.4388 -0.2008 0.8759
+vn -0.4723 -0.1986 0.8588
+vn 0.5786 -0.1334 0.8046
+vn -0.2975 -0.4062 0.8640
+vn 0.5002 0.2833 0.8182
+vn -0.5002 0.2833 0.8182
+vn 0.2980 0.5802 0.7580
+vn -0.2980 0.5802 0.7580
+vn 0.0929 -0.9912 -0.0944
+vn -0.0929 -0.9912 -0.0944
+vn 0.4688 -0.8715 0.1442
+vn -0.4688 -0.8715 0.1442
+vn 0.9309 -0.2541 0.2624
+vn -0.9264 -0.2460 0.2851
+vn 0.8465 0.5291 -0.0595
+vn -0.8267 0.5627 -0.0035
+vn -0.2511 0.9439 -0.2145
+vn 0.2146 0.9243 -0.3157
+vn -0.4841 0.8743 -0.0361
+vn 0.4196 0.8851 -0.2012
+vn -0.5256 -0.0030 -0.8507
+vn 0.5470 -0.0144 -0.8370
+vn -0.1466 0.0104 -0.9891
+vn 0.1466 0.0104 -0.9891
+vn 0.4046 0.0266 -0.9141
+vn -0.4046 0.0266 -0.9141
+vn -0.8073 0.5901 0.0041
+vn 0.7330 0.6786 0.0472
+vn 0.4200 -0.2291 -0.8781
+vn -0.4200 -0.2291 -0.8781
+vn -0.0687 -0.9943 -0.0818
+vn 0.0687 -0.9943 -0.0818
+vn 0.6713 -0.1971 0.7145
+vn -0.6713 -0.1971 0.7145
+vn 0.8326 -0.3017 0.4646
+vn -0.8326 -0.3017 0.4646
+vn 0.4258 -0.7967 0.4290
+vn -0.4258 -0.7967 0.4290
+vn 0.3265 -0.4954 0.8050
+vn -0.3265 -0.4954 0.8050
+vn -0.0649 -0.5714 0.8181
+vn 0.0649 -0.5714 0.8181
+vn -0.2738 -0.8315 0.4834
+vn 0.2738 -0.8315 0.4834
+vn -0.7606 -0.3400 0.5531
+vn 0.7824 -0.3294 0.5285
+vn -0.4658 -0.1863 0.8651
+vn 0.4658 -0.1863 0.8651
+vn -0.4983 0.1812 0.8478
+vn 0.4983 0.1812 0.8478
+vn -0.7683 0.3293 0.5488
+vn 0.7656 0.3223 0.5568
+vn -0.2487 0.8249 0.5076
+vn 0.2560 0.8073 0.5317
+vn -0.1017 0.5518 0.8277
+vn 0.0821 0.6023 0.7940
+vn 0.3861 0.5446 0.7445
+vn -0.3329 0.5231 0.7846
+vn 0.4059 0.7641 0.5014
+vn -0.4246 0.7711 0.4745
+vn 0.8299 0.2940 0.4742
+vn -0.8251 0.2968 0.4808
+vn 0.6617 0.2026 0.7219
+vn -0.6888 0.1868 0.7005
+vn 0.7816 0.3058 -0.5437
+vn -0.8400 0.3436 -0.4200
+vn 0.2037 0.8146 -0.5431
+vn -0.2074 0.8296 -0.5185
+vn -0.4381 0.7988 -0.4123
+vn 0.4056 0.7605 -0.5070
+vn -0.7861 0.3276 -0.5241
+vn 0.8642 0.3143 -0.3928
+vn -0.8519 -0.3408 -0.3976
+vn 0.8519 -0.3408 -0.3976
+vn -0.4056 -0.7605 -0.5070
+vn 0.4056 -0.7605 -0.5070
+vn 0.2074 -0.8296 -0.5185
+vn -0.2074 -0.8296 -0.5185
+vn 0.8297 -0.3734 -0.4149
+vn -0.8297 -0.3734 -0.4149
+vn 0.1054 -0.8433 0.5270
+vn -0.1367 -0.8748 0.4648
+vn 0.1916 -0.8620 0.4693
+vn -0.2303 -0.8656 0.4447
+vn 0.5959 -0.4256 0.6810
+vn -0.5959 -0.4256 0.6810
+vn 0.7563 -0.0299 0.6535
+vn -0.7563 -0.0299 0.6535
+vn 0.8069 0.0689 0.5866
+vn -0.8069 0.0689 0.5866
+vn 0.2334 -0.7779 0.5834
+vn -0.2334 -0.7779 0.5834
+vn 0.4177 -0.5751 0.7034
+vn -0.3557 -0.7290 0.5848
+vn 0.6872 -0.4191 0.5934
+vn -0.6872 -0.4191 0.5934
+vn 0.5537 -0.2978 0.7777
+vn -0.7028 -0.3915 0.5939
+vn 0.8227 0.3606 0.4395
+vn -0.3127 0.3425 0.8860
+vn 0.5041 0.6448 0.5745
+vn -0.5091 0.6482 0.5663
+vn 0.6155 0.4924 0.6155
+vn -0.6155 0.4924 0.6155
+vn -0.0371 0.6685 0.7428
+vn 0.0486 0.6560 0.7532
+vn -0.7386 0.3768 0.5590
+vn 0.7104 0.2715 0.6494
+vn -0.5774 0.5774 0.5774
+vn 0.6013 0.5262 0.6013
+vn 0.5364 -0.3230 0.7797
+vn -0.5070 -0.6281 0.5903
+vn 0.2181 -0.4685 0.8561
+vn -0.2181 -0.4685 0.8561
+vn -0.1073 -0.5010 0.8588
+vn 0.0348 -0.5792 0.8144
+vn -0.0770 -0.5759 0.8139
+vn 0.0899 -0.7843 0.6138
+vn 0.0279 -0.8645 0.5019
+vn -0.0547 -0.1695 0.9840
+vn 0.1687 -0.3128 0.9347
+vn -0.4260 -0.0609 0.9027
+vn 0.4350 -0.1812 0.8820
+vn -0.3352 -0.1828 0.9243
+vn 0.3223 -0.2762 0.9054
+vn -0.3579 -0.3068 0.8819
+vn 0.4815 -0.2408 0.8427
+vn -0.3069 0.2113 0.9280
+vn -0.0317 -0.1899 0.9813
+vn 0.0317 -0.1899 0.9813
+vn 0.1854 -0.4956 0.8485
+vn -0.6819 -0.2915 0.6709
+vn 0.2623 -0.3498 0.8994
+vn -0.2623 -0.3498 0.8994
+vn 0.0585 -0.0845 0.9947
+vn 0.0066 -0.2316 0.9728
+vn -0.0136 -0.6507 0.7592
+vn 0.0136 -0.6507 0.7592
+vn 0.2404 -0.5476 0.8014
+vn -0.2404 -0.5476 0.8014
+vn 0.3143 -0.3928 0.8642
+vn -0.3128 -0.1662 0.9352
+vn 0.2821 -0.0164 0.9592
+vn -0.2821 -0.0164 0.9592
+vn 0.3273 -0.1432 0.9340
+vn -0.3273 -0.1432 0.9340
+vn 0.0232 0.0511 0.9984
+vn 0.0043 -0.0651 0.9979
+vn 0.7826 -0.6087 -0.1304
+vn -0.7826 -0.6087 -0.1304
+vn 0.9448 0.1919 -0.2657
+vn -0.9448 0.1919 -0.2657
+vn 0.1018 0.9165 -0.3870
+vn -0.0693 0.9004 -0.4294
+vn -0.6905 0.5492 0.4708
+vn 0.4319 -0.8639 0.2592
+vn -0.4071 -0.8956 0.1791
+vn -0.6667 0.6667 0.3333
+vn 0.6667 0.6667 0.3333
+vn 0.1348 0.8086 0.5727
+vn -0.1348 0.8086 0.5727
+vn 0.7639 0.2971 0.5729
+vn -0.7532 0.2870 0.5918
+vn 0.4116 -0.8575 0.3087
+vn -0.4116 -0.8575 0.3087
+vn 0.0375 0.2247 0.9737
+vn -0.0502 0.2343 0.9709
+vn 0.1304 -0.2609 0.9565
+vn -0.1304 -0.2609 0.9565
+vn -0.0631 -0.8206 0.5681
+vn 0.0631 -0.8206 0.5681
+vn 0.7325 0.2817 0.6198
+vn -0.7325 0.2817 0.6198
+vn 0.3319 0.0738 0.9404
+vn -0.5460 -0.4310 0.7184
+vn 0.2815 0.0662 0.9573
+vn -0.3231 0.0311 0.9459
+vn 0.8753 0.2059 0.4376
+vn -0.7357 0.3910 0.5531
+vn 0.8973 0.1994 0.3938
+vn -0.8480 0.3180 0.4240
+vn 0.9586 0.0664 0.2767
+vn -0.9586 0.0664 0.2767
+vn 0.2524 -0.8655 0.4327
+vn -0.1783 -0.4161 0.8917
+vn -0.1751 -0.2043 0.9631
+vn 0.1751 -0.2043 0.9631
+vn -0.1219 -0.1829 0.9755
+vn 0.1219 -0.1829 0.9755
+vn -0.1562 0.3123 0.9370
+vn 0.1562 0.3123 0.9370
+vn -0.7238 0.6857 0.0762
+vn 0.7238 0.6857 0.0762
+vn 0.0478 -0.2870 0.9567
+vn -0.0478 -0.2870 0.9567
+vn -0.5488 -0.3293 0.7684
+vn 0.5488 -0.3293 0.7684
+vn -0.4945 -0.1130 0.8618
+vn 0.4945 -0.1130 0.8618
+vn -0.2595 0.1038 0.9601
+vn 0.1717 -0.0090 0.9851
+vn -0.6684 -0.4595 0.5849
+vn 0.4332 -0.4874 0.7581
+vn -0.1156 -0.6359 0.7631
+vn 0.1156 -0.6359 0.7631
+vn 0.4242 -0.6211 0.6590
+vn -0.4242 -0.6211 0.6590
+vn 0.4767 -0.3557 0.8039
+vn -0.4767 -0.3557 0.8039
+vn 0.5871 -0.0839 0.8052
+vn -0.5871 -0.0839 0.8052
+vn 0.5774 0.1155 0.8083
+vn -0.5657 0.1197 0.8159
+vn 0.5214 0.6574 0.5441
+vn -0.4082 0.4082 0.8165
+vn 0.3358 0.3478 0.8754
+vn -0.3358 0.3478 0.8754
+vn 0.1452 0.3774 0.9146
+vn -0.1452 0.3774 0.9146
+vn 0.0301 0.2306 0.9726
+vn -0.0301 0.2306 0.9726
+vn 0.3553 -0.5739 0.7379
+vn -0.2804 -0.2181 0.9348
+vn 0.2627 -0.2252 0.9382
+vn -0.2627 -0.2252 0.9382
+vn -0.0631 -0.3156 0.9468
+vn 0.3766 -0.8339 0.4035
+vn -0.2016 -0.9071 0.3696
+vn -0.0823 -0.7822 0.6175
+vn -0.3356 -0.2397 0.9110
+vn 0.3356 -0.2397 0.9110
+vn -0.4568 0.0508 0.8881
+vn 0.2692 -0.0577 0.9614
+vn -0.0247 0.4072 0.9130
+vn 0.0247 0.4072 0.9130
+vn -0.0487 0.6815 0.7302
+vn 0.0213 0.5546 0.8319
+vn 0.3378 0.5221 0.7831
+vn -0.3778 0.6342 0.6746
+vn 0.7895 -0.3158 0.5263
+vn -0.7895 -0.3158 0.5263
+vn 0.8070 -0.0807 0.5851
+vn -0.8070 -0.0807 0.5851
+vn 0.7868 0.1210 0.6052
+vn -0.7868 0.1210 0.6052
+vn -0.6357 0.6811 -0.3633
+vn 0.6357 0.6811 -0.3633
+vn -0.8507 0.3650 -0.3783
+vn 0.8507 0.3650 -0.3783
+vn -0.2197 0.8626 -0.4557
+vn 0.2664 0.8710 -0.4127
+vn 0.5914 0.7489 -0.2991
+vn -0.5932 0.7445 -0.3063
+vn 0.3653 0.8833 -0.2938
+vn -0.3714 0.8685 -0.3284
+vn 0.2760 0.9159 -0.2915
+vn -0.2760 0.9159 -0.2915
+vn 0.7964 0.1323 -0.5901
+vn -0.8873 0.1343 -0.4412
+vn 0.5442 -0.7524 -0.3712
+vn -0.5442 -0.7524 -0.3712
+vn 0.4027 -0.7323 -0.5492
+vn -0.4027 -0.7323 -0.5492
+vn 0.1649 -0.6644 -0.7289
+vn -0.3617 -0.3858 -0.8487
+vn 0.3011 -0.0125 -0.9535
+vn -0.1952 -0.0976 -0.9759
+vn 0.2562 -0.3112 -0.9152
+vn 0.0107 -0.5633 -0.8262
+vn 0.0779 -0.9948 -0.0663
+vn -0.0779 -0.9948 -0.0663
+vn 0.1094 -0.9718 -0.2089
+vn -0.1094 -0.9718 -0.2090
+vn 0.8150 -0.5621 -0.1405
+vn -0.8150 -0.5621 -0.1405
+vn 0.9358 0.1396 -0.3236
+vn -0.9358 0.1396 -0.3236
+vn 0.1132 -0.0274 -0.9932
+vn -0.1132 -0.0274 -0.9932
+vn -0.1497 -0.3635 -0.9195
+vn -0.1211 -0.0530 -0.9912
+vn 0.3706 -0.6780 -0.6349
+vn -0.9094 0.1371 -0.3927
+vn 0.9193 0.1393 -0.3682
+vn -0.9193 0.1393 -0.3682
+vn 0.9457 0.2673 -0.1850
+vn -0.9173 0.3440 -0.2007
+vn 0.9337 0.2813 -0.2215
+vn -0.9004 0.3642 -0.2380
+vn 0.9501 0.2455 -0.1922
+vn -0.8945 0.4337 0.1084
+vn 0.1835 -0.7864 -0.5898
+vn -0.1596 -0.9577 -0.2394
+vn 0.3727 -0.4759 -0.7966
+vn -0.3693 -0.4712 -0.8010
+vn 0.3263 -0.8342 -0.4446
+vn -0.2986 -0.8236 -0.4821
+vn 0.2620 -0.9574 -0.1217
+vn -0.2620 -0.9574 -0.1217
+vn 0.2996 -0.9443 -0.1362
+vn -0.2996 -0.9443 -0.1362
+vn 0.8642 -0.4737 0.1696
+vn -0.8305 0.3333 -0.4463
+vn 0.6869 -0.6358 0.3521
+vn -0.6869 -0.6358 0.3521
+vn 0.4189 -0.2265 -0.8793
+vn -0.2950 -0.0454 -0.9544
+vn 0.1119 0.9626 0.2468
+vn -0.1272 0.9658 0.2260
+vn 0.1208 0.9734 -0.1947
+vn -0.1208 0.9734 -0.1947
+vn 0.3140 0.5711 -0.7585
+vn -0.3140 0.5711 -0.7585
+vn 0.3231 0.9288 -0.1817
+vn -0.3231 0.9288 -0.1817
+vn 0.0452 0.7955 0.6043
+vn -0.0452 0.7955 0.6043
+vn 0.6144 0.7696 0.1738
+vn -0.6144 0.7696 0.1738
+vn 0.6935 0.6857 -0.2212
+vn -0.6935 0.6857 -0.2212
+vn 0.6304 0.2517 -0.7343
+vn -0.7104 0.1364 -0.6904
+vn 0.3179 0.5704 -0.7574
+vn -0.3179 0.5704 -0.7574
+vn 0.6289 0.7624 -0.1525
+vn -0.6289 0.7624 -0.1525
+vn 0.7088 0.6833 0.1752
+vn -0.7088 0.6833 0.1752
+vn 0.6885 0.3830 0.6158
+vn -0.6885 0.3830 0.6158
+vn 0.3238 0.9434 -0.0720
+vn -0.3669 0.8840 -0.2898
+vn 0.1548 0.5080 0.8473
+vn -0.2854 0.6237 0.7277
+vn -0.1819 0.1145 -0.9766
+vn 0.1819 0.1145 -0.9766
+vn -0.2638 0.9462 -0.1871
+vn 0.2638 0.9462 -0.1871
+vn 0.9340 0.2255 0.2773
+vn -0.8681 0.0893 -0.4883
+vn 0.9758 0.1241 0.1800
+vn -0.9758 0.1241 0.1800
+vn 0.9613 0.1472 -0.2330
+vn -0.9613 0.1472 -0.2330
+vn 0.9956 0.0893 -0.0288
+vn -0.9817 -0.0304 -0.1882
+vn 0.6374 -0.7651 0.0915
+vn -0.7466 -0.6646 0.0285
+vn 0.3720 -0.9244 0.0845
+vn -0.3723 -0.9243 0.0847
+vn 0.5281 -0.8354 0.1522
+vn -0.5281 -0.8354 0.1522
+vn 0.3070 -0.5237 0.7946
+vn -0.3070 -0.5237 0.7946
+vn 0.5236 -0.3290 -0.7859
+vn -0.5881 -0.3070 -0.7483
+vn 0.5396 -0.3343 -0.7727
+vn -0.4694 -0.2400 -0.8498
+vn 0.2144 -0.8341 -0.5082
+vn -0.4463 -0.8452 -0.2941
+vn 0.7365 -0.6154 -0.2808
+vn -0.6973 -0.6610 -0.2771
+vn 0.3244 0.4867 0.8111
+vn -0.3691 0.2855 0.8844
+vn 0.4649 0.2593 0.8465
+vn -0.4649 0.2593 0.8465
+vn 0.1817 -0.0079 0.9833
+vn -0.3188 0.1993 0.9266
+vn 0.2925 -0.0758 0.9533
+vn -0.2076 -0.0836 0.9746
+vn 0.5847 -0.2198 0.7809
+vn -0.3398 0.0824 0.9369
+vn 0.6509 -0.1939 0.7340
+vn -0.6509 -0.1939 0.7340
+vn 0.4075 0.7506 0.5201
+vn -0.4075 0.7506 0.5201
+vn -0.2655 0.8296 0.4911
+vn 0.2655 0.8296 0.4911
+vn -0.7885 0.2366 0.5677
+vn 0.8576 0.2223 0.4637
+vn -0.5242 -0.3548 0.7742
+vn 0.5257 -0.3579 0.7717
+vn 0.4390 -0.5252 0.7290
+vn -0.4663 -0.5991 0.6509
+vn 0.6888 -0.4428 0.5740
+vn -0.6888 -0.4428 0.5740
+vn 0.6302 -0.7658 0.1282
+vn -0.7507 -0.6131 -0.2461
+vn -0.2175 0.2733 0.9370
+vn 0.1788 0.2923 0.9395
+vn 0.9046 -0.3869 -0.1792
+vn -0.9046 -0.3869 -0.1792
+vn 0.1782 -0.0891 0.9800
+vn -0.1782 -0.0891 0.9800
+vn -0.2335 0.8972 0.3749
+vn 0.2335 0.8972 0.3749
+vn 0.7177 0.1689 0.6755
+vn -0.4480 -0.4480 0.7737
+vn 0.5313 0.5844 0.6134
+vn -0.5313 0.5844 0.6134
+vn 0.9008 -0.4075 0.1501
+vn -0.5534 -0.5534 0.6225
+vn 0.5815 -0.5217 0.6243
+vn -0.5724 -0.3122 0.7582
+vn 0.6138 -0.2571 0.7465
+vn -0.5597 -0.5533 0.6169
+vn 0.8779 -0.4788 0.0076
+vn -0.8779 -0.4788 0.0076
+vn 0.8717 -0.4446 -0.2063
+vn -0.9227 -0.3765 -0.0825
+vn 0.7661 -0.6363 0.0909
+vn -0.7661 -0.6363 0.0909
+vn 0.7930 -0.5947 0.1322
+vn -0.7815 -0.6176 0.0882
+vn 0.2408 0.9631 -0.1204
+vn -0.1240 0.9921 0.0207
+vn 0.9251 0.3469 0.1542
+vn -0.9435 0.3145 0.1048
+vn 0.7071 -0.7071 0.0000
+vn -0.7071 -0.7071 0.0000
+vn -0.0157 0.9898 0.1414
+vn 0.0157 0.9898 0.1414
+vn 0.6266 -0.7211 0.2956
+vn -0.6266 -0.7211 0.2956
+vn 0.2714 -0.9022 0.3353
+vn -0.2714 -0.9022 0.3353
+vn -0.8651 -0.4853 -0.1266
+vn 0.8651 -0.4853 -0.1266
+vn -0.8538 0.2328 -0.4657
+vn 0.8096 0.2429 -0.5343
+vn -0.5433 0.6985 -0.4657
+vn 0.5621 0.8231 -0.0803
+vn -0.1096 0.9939 -0.0157
+vn 0.0071 0.9899 0.1414
+vn 0.1738 0.0097 0.9847
+vn -0.1046 0.0392 0.9937
+vn 0.4134 0.0413 0.9096
+vn -0.2461 0.0852 0.9655
+vn 0.3228 -0.0461 0.9453
+vn -0.3228 -0.0461 0.9453
+vn 0.1220 0.0458 0.9915
+vn -0.2104 0.0124 0.9775
+vn 0.5679 0.1916 0.8005
+vn -0.5679 0.1916 0.8005
+vn 0.4244 -0.0320 0.9049
+vn -0.3787 -0.0364 0.9248
+vn 0.2570 0.0723 0.9637
+vn -0.2530 -0.1897 0.9487
+vn 0.1351 -0.0225 0.9906
+vn -0.1351 -0.0225 0.9906
+vn -0.2981 0.7454 0.5963
+vn 0.4870 0.6088 0.6262
+vn 0.5571 -0.1486 0.8171
+vn -0.5571 -0.1486 0.8171
+vn 0.4723 -0.1986 0.8588
+vn -0.4388 -0.2008 0.8759
+vn 0.2975 -0.4062 0.8640
+vn -0.5786 -0.1334 0.8046
+vn 0.5771 0.2164 0.7875
+vn -0.5771 0.2164 0.7875
+vn 0.0931 -0.9932 -0.0692
+vn -0.0931 -0.9932 -0.0692
+vn 0.5161 -0.8527 -0.0812
+vn -0.5161 -0.8527 -0.0812
+vn 0.9264 -0.2460 0.2851
+vn -0.9309 -0.2541 0.2624
+vn 0.8267 0.5627 -0.0035
+vn -0.8465 0.5291 -0.0595
+vn -0.2146 0.9243 -0.3157
+vn 0.2511 0.9439 -0.2145
+vn -0.4196 0.8851 -0.2012
+vn 0.4841 0.8743 -0.0361
+vn -0.5470 -0.0144 -0.8370
+vn 0.5256 -0.0030 -0.8507
+vn -0.2556 -0.0749 -0.9639
+vn 0.2556 -0.0749 -0.9639
+vn -0.7330 0.6786 0.0472
+vn 0.8073 0.5901 0.0041
+vn 0.6844 -0.1711 -0.7088
+vn -0.6844 -0.1711 -0.7088
+vn -0.3604 -0.8283 -0.4290
+vn 0.3604 -0.8283 -0.4290
+usemtl None
+s off
+f 47/1/1 3/2/1 45/3/1
+f 4/4/2 48/5/2 46/6/2
+f 45/3/3 5/7/3 43/8/3
+f 6/9/4 46/6/4 44/10/4
+f 3/2/5 7/11/5 5/7/5
+f 8/12/6 4/4/6 6/9/6
+f 1/13/7 9/14/7 3/2/7
+f 10/15/8 2/16/8 4/4/8
+f 11/17/9 15/18/9 9/14/9
+f 16/19/10 12/20/10 10/15/10
+f 9/14/11 17/21/11 7/11/11
+f 18/22/12 10/15/12 8/12/12
+f 21/23/13 17/21/13 15/18/13
+f 22/24/14 18/22/14 20/25/14
+f 13/26/15 21/23/15 15/18/15
+f 22/24/16 14/27/16 16/19/16
+f 23/28/17 27/29/17 21/23/17
+f 28/30/18 24/31/18 22/24/18
+f 27/29/19 19/32/19 21/23/19
+f 28/30/20 20/25/20 30/33/20
+f 33/34/21 29/35/21 27/29/21
+f 34/36/22 30/33/22 32/37/22
+f 35/38/23 27/29/23 25/39/23
+f 36/40/24 28/30/24 34/36/24
+f 37/41/25 33/34/25 35/38/25
+f 38/42/26 34/36/26 40/43/26
+f 39/44/27 31/45/27 33/34/27
+f 40/43/28 32/37/28 42/46/28
+f 45/3/29 41/47/29 39/44/29
+f 46/6/30 42/46/30 44/10/30
+f 47/1/31 39/44/31 37/41/31
+f 48/5/32 40/43/32 46/6/32
+f 37/41/33 49/48/33 47/1/33
+f 38/42/34 50/49/34 52/50/34
+f 35/38/35 51/51/35 37/41/35
+f 36/40/36 52/50/36 54/52/36
+f 25/39/37 53/53/37 35/38/37
+f 26/54/38 54/52/38 56/55/38
+f 23/28/39 55/56/39 25/39/39
+f 24/31/40 56/55/40 58/57/40
+f 23/28/41 59/58/41 57/59/41
+f 60/60/42 24/31/42 58/57/42
+f 13/26/43 63/61/43 59/58/43
+f 64/62/44 14/27/44 60/60/44
+f 11/17/45 65/63/45 63/61/45
+f 66/64/46 12/20/46 64/62/46
+f 1/13/47 49/48/47 65/63/47
+f 50/49/48 2/16/48 66/64/48
+f 61/65/49 65/63/49 49/48/49
+f 50/49/50 66/64/50 62/66/50
+f 63/61/51 65/63/51 61/65/51
+f 62/66/52 66/64/52 64/62/52
+f 61/65/53 59/58/53 63/61/53
+f 64/62/54 60/60/54 62/66/54
+f 61/65/55 57/59/55 59/58/55
+f 60/60/56 58/57/56 62/66/56
+f 61/65/57 55/56/57 57/59/57
+f 58/57/58 56/55/58 62/66/58
+f 61/65/59 53/53/59 55/56/59
+f 56/55/60 54/52/60 62/66/60
+f 61/65/61 51/51/61 53/53/61
+f 54/52/62 52/50/62 62/66/62
+f 61/65/63 49/48/63 51/51/63
+f 52/50/64 50/49/64 62/66/64
+f 174/67/65 91/68/65 89/69/65
+f 175/70/66 91/68/66 176/71/66
+f 172/72/67 89/69/67 87/73/67
+f 173/74/68 90/75/68 175/70/68
+f 85/76/69 172/72/69 87/73/69
+f 173/74/70 86/77/70 88/78/70
+f 83/79/71 170/80/71 85/76/71
+f 171/81/72 84/82/72 86/77/72
+f 81/83/73 168/84/73 83/79/73
+f 169/85/74 82/86/74 84/82/74
+f 79/87/75 146/88/75 164/89/75
+f 147/90/76 80/91/76 165/92/76
+f 94/93/77 146/88/77 92/94/77
+f 95/95/78 147/90/78 149/96/78
+f 94/93/79 150/97/79 148/98/79
+f 151/99/80 95/95/80 149/96/80
+f 98/100/81 150/97/81 96/101/81
+f 99/102/82 151/99/82 153/103/82
+f 100/104/83 152/105/83 98/100/83
+f 101/106/84 153/103/84 155/107/84
+f 102/108/85 154/109/85 100/104/85
+f 103/110/86 155/107/86 157/111/86
+f 102/108/87 158/112/87 156/113/87
+f 159/114/88 103/110/88 157/111/88
+f 106/115/89 158/112/89 104/116/89
+f 107/117/90 159/114/90 161/118/90
+f 108/119/91 160/120/91 106/115/91
+f 109/121/92 161/118/92 163/122/92
+f 67/123/93 162/124/93 108/119/93
+f 67/123/94 163/122/94 68/125/94
+f 128/126/95 162/124/95 110/127/95
+f 129/128/96 163/122/96 161/118/96
+f 128/126/97 158/112/97 160/120/97
+f 159/114/98 129/128/98 161/118/98
+f 156/113/99 179/129/99 126/130/99
+f 157/111/100 180/131/100 159/114/100
+f 154/109/101 126/130/101 124/132/101
+f 155/107/102 127/133/102 157/111/102
+f 152/105/103 124/132/103 122/134/103
+f 153/103/104 125/135/104 155/107/104
+f 150/97/105 122/134/105 120/136/105
+f 151/99/106 123/137/106 153/103/106
+f 148/98/107 120/136/107 118/138/107
+f 149/96/108 121/139/108 151/99/108
+f 146/88/109 118/138/109 116/140/109
+f 147/90/110 119/141/110 149/96/110
+f 164/89/111 116/140/111 114/142/111
+f 165/92/112 117/143/112 147/90/112
+f 114/142/113 177/144/113 164/89/113
+f 177/144/114 115/145/114 165/92/114
+f 162/124/115 112/146/115 110/127/115
+f 163/122/116 113/147/116 68/125/116
+f 112/146/117 178/148/117 183/149/117
+f 178/148/118 113/147/118 184/150/118
+f 181/151/119 178/148/119 177/144/119
+f 182/152/120 178/148/120 184/150/120
+f 135/153/121 176/71/121 174/67/121
+f 176/71/122 136/154/122 175/70/122
+f 133/155/123 174/67/123 172/72/123
+f 175/70/124 134/156/124 173/74/124
+f 133/155/125 170/80/125 131/157/125
+f 134/156/126 171/81/126 173/74/126
+f 166/158/127 185/159/127 168/84/127
+f 186/160/128 167/161/128 169/85/128
+f 131/157/129 168/84/129 185/159/129
+f 169/85/130 132/162/130 186/160/130
+f 190/163/131 187/164/131 144/165/131
+f 190/163/132 188/166/132 189/167/132
+f 187/164/133 69/168/133 185/159/133
+f 188/166/134 69/168/134 189/167/134
+f 131/157/135 69/168/135 130/169/135
+f 132/162/135 69/168/135 186/160/135
+f 142/170/136 191/171/136 144/165/136
+f 192/172/137 143/173/137 145/174/137
+f 140/175/138 193/176/138 142/170/138
+f 194/177/139 141/178/139 143/173/139
+f 197/179/140 140/175/140 139/180/140
+f 198/181/141 141/178/141 196/182/141
+f 71/183/142 139/180/142 138/184/142
+f 71/183/143 139/180/143 198/181/143
+f 144/165/144 70/185/144 190/163/144
+f 145/174/145 70/185/145 192/172/145
+f 191/171/146 208/186/146 70/185/146
+f 192/172/147 208/186/147 207/187/147
+f 71/183/148 200/188/148 197/179/148
+f 201/189/149 71/183/149 198/181/149
+f 197/179/150 202/190/150 195/191/150
+f 203/192/151 198/181/151 196/182/151
+f 202/190/152 193/176/152 195/191/152
+f 203/192/153 194/177/153 205/193/153
+f 193/176/154 206/194/154 191/171/154
+f 207/187/155 194/177/155 192/172/155
+f 204/195/156 200/188/156 199/196/156
+f 205/193/157 201/189/157 203/192/157
+f 199/196/158 206/194/158 204/195/158
+f 207/187/159 199/196/159 205/193/159
+f 139/180/160 164/89/160 177/144/160
+f 165/92/161 139/180/161 177/144/161
+f 140/175/162 211/197/162 164/89/162
+f 212/198/163 141/178/163 165/92/163
+f 144/165/164 211/197/164 142/170/164
+f 145/174/165 212/198/165 214/199/165
+f 187/164/166 213/200/166 144/165/166
+f 188/166/167 214/199/167 167/161/167
+f 209/201/168 166/158/168 81/83/168
+f 210/202/169 167/161/169 214/199/169
+f 215/203/170 213/200/170 209/201/170
+f 216/204/171 214/199/171 212/198/171
+f 79/87/172 211/197/172 215/203/172
+f 212/198/173 80/91/173 216/204/173
+f 130/169/174 222/205/174 131/157/174
+f 130/169/175 223/206/175 72/207/175
+f 133/155/176 222/205/176 220/208/176
+f 223/206/177 134/156/177 221/209/177
+f 135/153/178 220/208/178 218/210/178
+f 221/209/179 136/154/179 219/211/179
+f 137/212/135 218/210/135 217/213/135
+f 219/211/135 137/212/135 217/213/135
+f 218/210/180 231/214/180 217/213/180
+f 219/211/181 231/214/181 230/215/181
+f 218/210/182 227/216/182 229/217/182
+f 228/218/183 219/211/183 230/215/183
+f 220/208/142 225/219/142 227/216/142
+f 226/220/184 221/209/184 228/218/184
+f 72/207/185 225/219/185 222/205/185
+f 72/207/186 226/220/186 224/221/186
+f 224/221/187 229/217/187 225/219/187
+f 230/215/188 224/221/188 226/220/188
+f 225/219/189 229/217/189 227/216/189
+f 228/218/190 230/215/190 226/220/190
+f 183/149/191 234/222/191 232/223/191
+f 235/224/192 184/150/192 233/225/192
+f 112/146/193 232/223/193 254/226/193
+f 233/225/194 113/147/194 255/227/194
+f 112/146/195 256/228/195 110/127/195
+f 113/147/196 257/229/196 255/227/196
+f 114/142/197 234/222/197 181/151/197
+f 115/145/198 235/224/198 253/230/198
+f 114/142/199 250/231/199 252/232/199
+f 251/233/200 115/145/200 253/230/200
+f 116/140/201 248/234/201 250/231/201
+f 249/235/202 117/143/202 251/233/202
+f 118/138/203 246/236/203 248/234/203
+f 247/237/204 119/141/204 249/235/204
+f 120/136/205 244/238/205 246/236/205
+f 245/239/206 121/139/206 247/237/206
+f 124/132/207 244/238/207 122/134/207
+f 125/135/208 245/239/208 243/240/208
+f 126/130/209 242/241/209 124/132/209
+f 127/133/210 243/240/210 241/242/210
+f 126/130/211 236/243/211 240/244/211
+f 237/245/212 127/133/212 241/242/212
+f 179/129/213 238/246/213 236/243/213
+f 239/247/214 180/131/214 237/245/214
+f 128/126/215 256/228/215 238/246/215
+f 257/229/216 129/128/216 239/247/216
+f 256/228/217 276/248/217 238/246/217
+f 257/229/218 277/249/218 259/250/218
+f 236/243/219 276/248/219 278/251/219
+f 277/249/220 237/245/220 279/252/220
+f 236/243/221 274/253/221 240/244/221
+f 237/245/222 275/254/222 279/252/222
+f 240/244/223 272/255/223 242/241/223
+f 241/242/224 273/256/224 275/254/224
+f 244/238/225 272/255/225 270/257/225
+f 273/256/226 245/239/226 271/258/226
+f 244/238/227 268/259/227 246/236/227
+f 245/239/228 269/260/228 271/258/228
+f 248/234/229 268/259/229 266/261/229
+f 269/260/230 249/235/230 267/262/230
+f 248/234/231 264/263/231 250/231/231
+f 249/235/232 265/264/232 267/262/232
+f 250/231/233 262/265/233 252/232/233
+f 251/233/234 263/266/234 265/264/234
+f 234/222/235 262/265/235 280/267/235
+f 263/266/236 235/224/236 281/268/236
+f 256/228/237 260/269/237 258/270/237
+f 261/271/238 257/229/238 259/250/238
+f 254/226/239 282/272/239 260/269/239
+f 283/273/240 255/227/240 261/271/240
+f 232/223/241 280/267/241 282/272/241
+f 281/268/242 233/225/242 283/273/242
+f 67/123/243 284/274/243 73/275/243
+f 285/276/244 67/123/244 73/275/244
+f 108/119/245 286/277/245 284/274/245
+f 287/278/246 109/121/246 285/276/246
+f 104/116/247 286/277/247 106/115/247
+f 105/279/248 287/278/248 289/280/248
+f 102/108/249 288/281/249 104/116/249
+f 103/110/250 289/280/250 291/282/250
+f 100/104/251 290/283/251 102/108/251
+f 101/106/252 291/282/252 293/284/252
+f 100/104/253 294/285/253 292/286/253
+f 295/287/254 101/106/254 293/284/254
+f 96/101/255 294/285/255 98/100/255
+f 97/288/256 295/287/256 297/289/256
+f 96/101/257 298/290/257 296/291/257
+f 299/292/258 97/288/258 297/289/258
+f 94/93/259 300/293/259 298/290/259
+f 301/294/260 95/95/260 299/292/260
+f 309/295/261 338/296/261 308/297/261
+f 309/298/262 339/299/262 329/300/262
+f 308/297/263 336/301/263 307/302/263
+f 308/303/264 337/304/264 339/299/264
+f 307/302/265 340/305/265 306/306/265
+f 307/307/266 341/308/266 337/304/266
+f 89/69/267 306/306/267 340/305/267
+f 306/306/268 90/75/268 341/308/268
+f 87/73/269 340/305/269 334/309/269
+f 341/308/270 88/78/270 335/310/270
+f 85/76/271 334/309/271 330/311/271
+f 335/310/272 86/77/272 331/312/272
+f 83/79/273 330/311/273 332/313/273
+f 331/312/274 84/82/274 333/314/274
+f 330/311/275 338/296/275 332/313/275
+f 339/299/276 331/312/276 333/314/276
+f 334/309/277 336/301/277 330/311/277
+f 335/310/278 337/304/278 341/308/278
+f 332/313/279 328/315/279 326/316/279
+f 333/314/280 329/300/280 339/299/280
+f 81/83/281 332/313/281 326/316/281
+f 333/314/282 82/86/282 327/317/282
+f 342/318/283 215/203/283 209/201/283
+f 343/319/284 216/204/284 345/320/284
+f 326/316/285 209/201/285 81/83/285
+f 327/317/286 210/202/286 343/319/286
+f 215/203/287 346/321/287 79/87/287
+f 216/204/288 347/322/288 345/320/288
+f 346/321/289 92/94/289 79/87/289
+f 347/322/290 93/323/290 301/294/290
+f 324/324/291 304/325/291 77/326/291
+f 325/327/292 304/328/292 353/329/292
+f 352/330/293 78/331/293 304/325/293
+f 353/329/294 78/332/294 351/333/294
+f 78/331/295 348/334/295 305/335/295
+f 349/336/296 78/332/296 305/337/296
+f 305/335/297 328/315/297 309/295/297
+f 329/300/298 305/337/298 309/298/298
+f 328/315/299 342/318/299 326/316/299
+f 329/300/300 343/319/300 349/336/300
+f 296/291/301 318/338/301 310/339/301
+f 319/340/302 297/289/302 311/341/302
+f 316/342/303 77/326/303 76/343/303
+f 317/344/304 77/345/304 325/327/304
+f 358/346/305 303/347/305 302/348/305
+f 359/349/306 303/350/306 357/351/306
+f 303/347/307 354/352/307 75/353/307
+f 355/354/308 303/350/308 75/355/308
+f 75/353/309 316/342/309 76/343/309
+f 317/344/310 75/355/310 76/356/310
+f 292/357/311 362/358/311 364/359/311
+f 363/360/312 293/361/312 365/362/312
+f 364/359/313 368/363/313 366/364/313
+f 369/365/314 365/362/314 367/366/314
+f 366/364/315 370/367/315 372/368/315
+f 371/369/316 367/366/316 373/370/316
+f 372/368/317 376/371/317 374/372/317
+f 377/373/318 373/370/318 375/374/318
+f 378/375/319 376/371/319 314/376/319
+f 379/377/320 377/373/320 375/374/320
+f 316/342/321 374/372/321 378/375/321
+f 375/374/322 317/344/322 379/377/322
+f 354/352/323 372/368/323 374/372/323
+f 373/370/324 355/354/324 375/374/324
+f 356/378/325 366/364/325 372/368/325
+f 367/366/326 357/351/326 373/370/326
+f 358/346/327 364/359/327 366/364/327
+f 365/362/328 359/349/328 367/366/328
+f 292/357/329 360/379/329 290/380/329
+f 293/361/330 361/381/330 365/362/330
+f 360/379/331 302/348/331 74/382/331
+f 361/381/332 302/383/332 359/349/332
+f 284/384/333 288/385/333 290/380/333
+f 289/386/334 285/387/334 291/388/334
+f 284/384/335 360/379/335 74/382/335
+f 361/381/336 285/387/336 74/389/336
+f 73/390/337 284/384/337 74/382/337
+f 74/389/338 285/387/338 73/391/338
+f 296/291/339 362/358/339 294/285/339
+f 297/289/340 363/360/340 311/341/340
+f 310/339/341 368/363/341 362/358/341
+f 369/365/342 311/341/342 363/360/342
+f 312/392/343 370/367/343 368/363/343
+f 371/369/344 313/393/344 369/365/344
+f 376/371/345 382/394/345 314/376/345
+f 377/373/346 383/395/346 371/369/346
+f 350/396/347 384/397/347 348/334/347
+f 351/333/348 385/398/348 387/399/348
+f 384/397/349 320/400/349 318/338/349
+f 385/398/350 321/401/350 387/399/350
+f 298/290/351 384/397/351 318/338/351
+f 385/398/352 299/292/352 319/340/352
+f 300/293/353 342/318/353 384/397/353
+f 343/319/354 301/294/354 385/398/354
+f 342/318/355 348/334/355 384/397/355
+f 385/398/356 349/336/356 343/319/356
+f 300/293/357 346/321/357 344/402/357
+f 345/320/358 347/322/358 301/294/358
+f 322/403/359 378/375/359 314/376/359
+f 323/404/360 379/377/360 381/405/360
+f 378/375/361 324/324/361 316/342/361
+f 379/377/362 325/327/362 381/405/362
+f 386/406/363 322/403/363 320/400/363
+f 387/399/364 323/404/364 381/405/364
+f 352/330/365 386/406/365 350/396/365
+f 353/329/366 387/399/366 381/405/366
+f 324/324/367 380/407/367 352/330/367
+f 353/329/368 381/405/368 325/327/368
+f 388/408/369 402/409/369 400/410/369
+f 389/411/370 403/412/370 415/413/370
+f 400/410/371 404/414/371 398/415/371
+f 405/416/372 401/417/372 399/418/372
+f 404/414/373 396/419/373 398/415/373
+f 405/416/374 397/420/374 407/421/374
+f 406/422/375 394/423/375 396/419/375
+f 407/421/376 395/424/376 409/425/376
+f 408/426/377 392/427/377 394/423/377
+f 409/425/378 393/428/378 411/429/378
+f 392/427/379 412/430/379 390/431/379
+f 413/432/380 393/428/380 391/433/380
+f 410/434/381 418/435/381 412/430/381
+f 419/436/382 411/429/382 413/432/382
+f 408/426/383 420/437/383 410/434/383
+f 421/438/384 409/425/384 411/429/384
+f 424/439/385 408/426/385 406/422/385
+f 425/440/386 409/425/386 423/441/386
+f 426/442/387 406/422/387 404/414/387
+f 427/443/388 407/421/388 425/440/388
+f 428/444/389 404/414/389 402/409/389
+f 429/445/390 405/416/390 427/443/390
+f 402/409/391 416/446/391 428/444/391
+f 417/447/392 403/412/392 429/445/392
+f 320/400/393 442/448/393 318/338/393
+f 321/401/394 443/449/394 445/450/394
+f 390/431/395 444/451/395 320/452/395
+f 391/433/396 445/453/396 413/432/396
+f 310/339/397 442/448/397 312/392/397
+f 443/449/398 311/341/398 313/393/398
+f 382/454/399 414/455/399 388/408/399
+f 415/413/400 383/456/400 389/411/400
+f 412/430/401 440/457/401 444/451/401
+f 441/458/402 413/432/402 445/453/402
+f 446/459/403 440/457/403 438/460/403
+f 447/461/404 441/458/404 445/453/404
+f 434/462/135 438/460/135 436/463/135
+f 439/464/135 435/465/135 437/466/135
+f 448/467/405 434/462/405 432/468/405
+f 449/469/406 435/465/406 447/461/406
+f 448/467/407 450/470/407 430/471/407
+f 449/469/408 451/472/408 433/473/408
+f 430/471/409 416/446/409 414/455/409
+f 431/474/410 417/447/410 451/472/410
+f 312/392/411 430/475/411 382/394/411
+f 431/476/412 313/393/412 383/395/412
+f 442/448/413 448/477/413 312/392/413
+f 443/449/414 449/478/414 447/479/414
+f 442/448/415 444/480/415 446/481/415
+f 447/479/416 445/450/416 443/449/416
+f 416/446/417 452/482/417 476/483/417
+f 453/484/418 417/447/418 477/485/418
+f 432/468/419 452/482/419 450/470/419
+f 433/473/420 453/484/420 463/486/420
+f 432/468/421 460/487/421 462/488/421
+f 461/489/422 433/473/422 463/486/422
+f 436/463/423 460/487/423 434/462/423
+f 437/466/424 461/489/424 459/490/424
+f 438/460/425 458/491/425 436/463/425
+f 439/464/426 459/490/426 457/492/426
+f 438/460/427 454/493/427 456/494/427
+f 455/495/428 439/464/428 457/492/428
+f 440/457/429 474/496/429 454/493/429
+f 475/497/429 441/458/429 455/495/429
+f 428/444/430 476/483/430 464/498/430
+f 477/485/431 429/445/431 465/499/431
+f 426/442/432 464/498/432 466/500/432
+f 465/499/433 427/443/433 467/501/433
+f 424/439/434 466/500/434 468/502/434
+f 467/501/435 425/440/435 469/503/435
+f 424/439/436 470/504/436 422/505/436
+f 425/440/437 471/506/437 469/503/437
+f 422/505/438 472/507/438 420/437/438
+f 423/441/439 473/508/439 471/506/439
+f 420/437/440 474/496/440 418/435/440
+f 421/438/441 475/497/441 473/508/441
+f 456/494/442 478/509/442 458/491/442
+f 457/492/443 479/510/443 481/511/443
+f 480/512/444 484/513/444 478/509/444
+f 481/511/445 485/514/445 483/515/445
+f 484/513/446 488/516/446 486/517/446
+f 489/518/447 485/514/447 487/519/447
+f 488/516/448 492/520/448 486/517/448
+f 489/518/449 493/521/449 491/522/449
+f 464/498/450 486/517/450 492/520/450
+f 487/519/451 465/499/451 493/521/451
+f 484/513/452 476/483/452 452/482/452
+f 485/514/453 477/485/453 487/519/453
+f 462/488/454 484/513/454 452/482/454
+f 463/486/455 485/514/455 479/510/455
+f 458/491/135 462/488/135 460/487/135
+f 463/486/135 459/490/135 461/489/135
+f 474/496/456 456/494/456 454/493/456
+f 475/497/457 457/492/457 481/511/457
+f 472/507/458 480/512/458 474/496/458
+f 481/511/459 473/508/459 475/497/459
+f 488/516/460 472/507/460 470/504/460
+f 489/518/461 473/508/461 483/515/461
+f 490/523/462 470/504/462 468/502/462
+f 491/522/463 471/506/463 489/518/463
+f 466/500/464 490/523/464 468/502/464
+f 491/522/465 467/501/465 469/503/465
+f 464/498/466 492/520/466 466/500/466
+f 467/501/467 493/521/467 465/499/467
+f 392/427/468 504/524/468 502/525/468
+f 505/526/469 393/428/469 503/527/469
+f 394/423/470 502/525/470 500/528/470
+f 503/527/471 395/424/471 501/529/471
+f 394/423/472 498/530/472 396/419/472
+f 395/424/473 499/531/473 501/529/473
+f 396/419/474 496/532/474 398/533/474
+f 397/420/475 497/534/475 499/531/475
+f 398/533/476 494/535/476 400/536/476
+f 399/537/477 495/538/477 497/534/477
+f 400/536/478 506/539/478 388/540/478
+f 401/541/479 507/542/479 495/538/479
+f 502/525/480 506/539/480 494/535/480
+f 503/527/481 507/542/481 505/526/481
+f 494/535/482 500/528/482 502/525/482
+f 501/529/483 495/538/483 503/527/483
+f 496/532/484 498/530/484 500/528/484
+f 501/529/485 499/531/485 497/534/485
+f 382/394/486 506/543/486 314/376/486
+f 383/544/487 507/542/487 389/545/487
+f 314/546/488 504/524/488 322/547/488
+f 505/526/489 315/548/489 323/549/489
+f 320/452/490 504/524/490 390/431/490
+f 505/526/491 321/550/491 391/433/491
+f 47/1/492 1/13/492 3/2/492
+f 4/4/493 2/16/493 48/5/493
+f 45/3/494 3/2/494 5/7/494
+f 6/9/495 4/4/495 46/6/495
+f 3/2/496 9/14/496 7/11/496
+f 8/12/497 10/15/497 4/4/497
+f 1/13/498 11/17/498 9/14/498
+f 10/15/499 12/20/499 2/16/499
+f 11/17/500 13/26/500 15/18/500
+f 16/19/501 14/27/501 12/20/501
+f 9/14/502 15/18/502 17/21/502
+f 18/22/503 16/19/503 10/15/503
+f 21/23/504 19/32/504 17/21/504
+f 22/24/505 16/19/505 18/22/505
+f 13/26/506 23/28/506 21/23/506
+f 22/24/507 24/31/507 14/27/507
+f 23/28/508 25/39/508 27/29/508
+f 28/30/509 26/54/509 24/31/509
+f 27/29/510 29/35/510 19/32/510
+f 28/30/511 22/24/511 20/25/511
+f 33/34/512 31/45/512 29/35/512
+f 34/36/513 28/30/513 30/33/513
+f 35/38/514 33/34/514 27/29/514
+f 36/40/515 26/54/515 28/30/515
+f 37/41/516 39/44/516 33/34/516
+f 38/42/517 36/40/517 34/36/517
+f 39/44/518 41/47/518 31/45/518
+f 40/43/519 34/36/519 32/37/519
+f 45/3/520 43/8/520 41/47/520
+f 46/6/521 40/43/521 42/46/521
+f 47/1/522 45/3/522 39/44/522
+f 48/5/523 38/42/523 40/43/523
+f 37/41/524 51/51/524 49/48/524
+f 38/42/525 48/5/525 50/49/525
+f 35/38/526 53/53/526 51/51/526
+f 36/40/527 38/42/527 52/50/527
+f 25/39/528 55/56/528 53/53/528
+f 26/54/529 36/40/529 54/52/529
+f 23/28/530 57/59/530 55/56/530
+f 24/31/531 26/54/531 56/55/531
+f 23/28/532 13/26/532 59/58/532
+f 60/60/533 14/27/533 24/31/533
+f 13/26/534 11/17/534 63/61/534
+f 64/62/535 12/20/535 14/27/535
+f 11/17/536 1/13/536 65/63/536
+f 66/64/537 2/16/537 12/20/537
+f 1/13/538 47/1/538 49/48/538
+f 50/49/539 48/5/539 2/16/539
+f 174/67/540 176/71/540 91/68/540
+f 175/70/541 90/75/541 91/68/541
+f 172/72/542 174/67/542 89/69/542
+f 173/74/543 88/78/543 90/75/543
+f 85/76/544 170/80/544 172/72/544
+f 173/74/545 171/81/545 86/77/545
+f 83/79/546 168/84/546 170/80/546
+f 171/81/547 169/85/547 84/82/547
+f 81/83/548 166/158/548 168/84/548
+f 169/85/549 167/161/549 82/86/549
+f 79/87/550 92/94/550 146/88/550
+f 147/90/551 93/323/551 80/91/551
+f 94/93/552 148/98/552 146/88/552
+f 95/95/553 93/323/553 147/90/553
+f 94/93/554 96/101/554 150/97/554
+f 151/99/555 97/288/555 95/95/555
+f 98/100/556 152/105/556 150/97/556
+f 99/102/557 97/288/557 151/99/557
+f 100/104/558 154/109/558 152/105/558
+f 101/106/559 99/102/559 153/103/559
+f 102/108/560 156/113/560 154/109/560
+f 103/110/561 101/106/561 155/107/561
+f 102/108/562 104/116/562 158/112/562
+f 159/114/563 105/279/563 103/110/563
+f 106/115/564 160/120/564 158/112/564
+f 107/117/565 105/279/565 159/114/565
+f 108/119/566 162/124/566 160/120/566
+f 109/121/567 107/117/567 161/118/567
+f 67/123/568 68/125/568 162/124/568
+f 67/123/569 109/121/569 163/122/569
+f 128/126/570 160/120/570 162/124/570
+f 129/128/571 111/551/571 163/122/571
+f 128/126/572 179/129/572 158/112/572
+f 159/114/573 180/131/573 129/128/573
+f 156/113/574 158/112/574 179/129/574
+f 157/111/575 127/133/575 180/131/575
+f 154/109/576 156/113/576 126/130/576
+f 155/107/577 125/135/577 127/133/577
+f 152/105/578 154/109/578 124/132/578
+f 153/103/579 123/137/579 125/135/579
+f 150/97/580 152/105/580 122/134/580
+f 151/99/581 121/139/581 123/137/581
+f 148/98/582 150/97/582 120/136/582
+f 149/96/583 119/141/583 121/139/583
+f 146/88/584 148/98/584 118/138/584
+f 147/90/585 117/143/585 119/141/585
+f 164/89/586 146/88/586 116/140/586
+f 165/92/587 115/145/587 117/143/587
+f 114/142/588 181/151/588 177/144/588
+f 177/144/589 182/152/589 115/145/589
+f 162/124/590 68/125/590 112/146/590
+f 163/122/591 111/551/591 113/147/591
+f 112/146/592 68/125/592 178/148/592
+f 178/148/593 68/125/593 113/147/593
+f 181/151/594 183/149/594 178/148/594
+f 182/152/595 177/144/595 178/148/595
+f 135/153/596 137/212/596 176/71/596
+f 176/71/597 137/212/597 136/154/597
+f 133/155/598 135/153/598 174/67/598
+f 175/70/599 136/154/599 134/156/599
+f 133/155/600 172/72/600 170/80/600
+f 134/156/601 132/162/601 171/81/601
+f 166/158/602 187/164/602 185/159/602
+f 186/160/603 188/166/603 167/161/603
+f 131/157/604 170/80/604 168/84/604
+f 169/85/605 171/81/605 132/162/605
+f 190/163/132 189/167/132 187/164/132
+f 190/163/606 145/174/606 188/166/606
+f 187/164/134 189/167/134 69/168/134
+f 188/166/607 186/160/607 69/168/607
+f 131/157/135 185/159/135 69/168/135
+f 132/162/135 130/169/135 69/168/135
+f 142/170/608 193/176/608 191/171/608
+f 192/172/609 194/177/609 143/173/609
+f 140/175/610 195/191/610 193/176/610
+f 194/177/611 196/182/611 141/178/611
+f 197/179/612 195/191/612 140/175/612
+f 198/181/613 139/180/613 141/178/613
+f 71/183/614 197/179/614 139/180/614
+f 71/183/184 138/184/184 139/180/184
+f 144/165/615 191/171/615 70/185/615
+f 145/174/616 190/163/616 70/185/616
+f 191/171/146 206/194/146 208/186/146
+f 192/172/147 70/185/147 208/186/147
+f 71/183/617 199/196/617 200/188/617
+f 201/189/618 199/196/618 71/183/618
+f 197/179/619 200/188/619 202/190/619
+f 203/192/620 201/189/620 198/181/620
+f 202/190/621 204/195/621 193/176/621
+f 203/192/622 196/182/622 194/177/622
+f 193/176/623 204/195/623 206/194/623
+f 207/187/624 205/193/624 194/177/624
+f 204/195/625 202/190/625 200/188/625
+f 205/193/626 199/196/626 201/189/626
+f 199/196/627 208/186/627 206/194/627
+f 207/187/628 208/186/628 199/196/628
+f 139/180/629 140/175/629 164/89/629
+f 165/92/630 141/178/630 139/180/630
+f 140/175/631 142/170/631 211/197/631
+f 212/198/632 143/173/632 141/178/632
+f 144/165/633 213/200/633 211/197/633
+f 145/174/634 143/173/634 212/198/634
+f 187/164/635 166/158/635 213/200/635
+f 188/166/636 145/174/636 214/199/636
+f 209/201/637 213/200/637 166/158/637
+f 210/202/638 82/86/638 167/161/638
+f 215/203/639 211/197/639 213/200/639
+f 216/204/640 210/202/640 214/199/640
+f 79/87/641 164/89/641 211/197/641
+f 212/198/642 165/92/642 80/91/642
+f 130/169/643 72/207/643 222/205/643
+f 130/169/644 132/162/644 223/206/644
+f 133/155/645 131/157/645 222/205/645
+f 223/206/646 132/162/646 134/156/646
+f 135/153/647 133/155/647 220/208/647
+f 221/209/648 134/156/648 136/154/648
+f 137/212/649 135/153/649 218/210/649
+f 219/211/650 136/154/650 137/212/650
+f 218/210/180 229/217/180 231/214/180
+f 219/211/181 217/213/181 231/214/181
+f 218/210/651 220/208/651 227/216/651
+f 228/218/652 221/209/652 219/211/652
+f 220/208/142 222/205/142 225/219/142
+f 226/220/184 223/206/184 221/209/184
+f 72/207/185 224/221/185 225/219/185
+f 72/207/186 223/206/186 226/220/186
+f 224/221/653 231/214/653 229/217/653
+f 230/215/654 231/214/654 224/221/654
+f 183/149/655 181/151/655 234/222/655
+f 235/224/656 182/152/656 184/150/656
+f 112/146/657 183/149/657 232/223/657
+f 233/225/658 184/150/658 113/147/658
+f 112/146/659 254/226/659 256/228/659
+f 113/147/660 111/551/660 257/229/660
+f 114/142/661 252/232/661 234/222/661
+f 115/145/662 182/152/662 235/224/662
+f 114/142/663 116/140/663 250/231/663
+f 251/233/664 117/143/664 115/145/664
+f 116/140/665 118/138/665 248/234/665
+f 249/235/666 119/141/666 117/143/666
+f 118/138/667 120/136/667 246/236/667
+f 247/237/668 121/139/668 119/141/668
+f 120/136/669 122/134/669 244/238/669
+f 245/239/670 123/137/670 121/139/670
+f 124/132/671 242/241/671 244/238/671
+f 125/135/672 123/137/672 245/239/672
+f 126/130/673 240/244/673 242/241/673
+f 127/133/674 125/135/674 243/240/674
+f 126/130/675 179/129/675 236/243/675
+f 237/245/676 180/131/676 127/133/676
+f 179/129/677 128/126/677 238/246/677
+f 239/247/678 129/128/678 180/131/678
+f 128/126/679 110/127/679 256/228/679
+f 257/229/680 111/551/680 129/128/680
+f 256/228/681 258/270/681 276/248/681
+f 257/229/682 239/247/682 277/249/682
+f 236/243/683 238/246/683 276/248/683
+f 277/249/684 239/247/684 237/245/684
+f 236/243/685 278/251/685 274/253/685
+f 237/245/686 241/242/686 275/254/686
+f 240/244/687 274/253/687 272/255/687
+f 241/242/688 243/240/688 273/256/688
+f 244/238/689 242/241/689 272/255/689
+f 273/256/690 243/240/690 245/239/690
+f 244/238/691 270/257/691 268/259/691
+f 245/239/692 247/237/692 269/260/692
+f 248/234/693 246/236/693 268/259/693
+f 269/260/694 247/237/694 249/235/694
+f 248/234/695 266/261/695 264/263/695
+f 249/235/696 251/233/696 265/264/696
+f 250/231/697 264/263/697 262/265/697
+f 251/233/698 253/230/698 263/266/698
+f 234/222/235 252/232/235 262/265/235
+f 263/266/236 253/230/236 235/224/236
+f 256/228/699 254/226/699 260/269/699
+f 261/271/700 255/227/700 257/229/700
+f 254/226/701 232/223/701 282/272/701
+f 283/273/702 233/225/702 255/227/702
+f 232/223/703 234/222/703 280/267/703
+f 281/268/704 235/224/704 233/225/704
+f 67/123/705 108/119/705 284/274/705
+f 285/276/706 109/121/706 67/123/706
+f 108/119/707 106/115/707 286/277/707
+f 287/278/708 107/117/708 109/121/708
+f 104/116/709 288/281/709 286/277/709
+f 105/279/710 107/117/710 287/278/710
+f 102/108/711 290/283/711 288/281/711
+f 103/110/712 105/279/712 289/280/712
+f 100/104/713 292/286/713 290/283/713
+f 101/106/714 103/110/714 291/282/714
+f 100/104/715 98/100/715 294/285/715
+f 295/287/716 99/102/716 101/106/716
+f 96/101/717 296/291/717 294/285/717
+f 97/288/718 99/102/718 295/287/718
+f 96/101/719 94/93/719 298/290/719
+f 299/292/720 95/95/720 97/288/720
+f 94/93/721 92/94/721 300/293/721
+f 301/294/722 93/323/722 95/95/722
+f 309/295/723 328/315/723 338/296/723
+f 309/298/724 308/303/724 339/299/724
+f 308/297/725 338/296/725 336/301/725
+f 308/303/726 307/307/726 337/304/726
+f 307/302/727 336/301/727 340/305/727
+f 307/307/728 306/306/728 341/308/728
+f 89/69/729 91/68/729 306/306/729
+f 306/306/730 91/68/730 90/75/730
+f 87/73/731 89/69/731 340/305/731
+f 341/308/732 90/75/732 88/78/732
+f 85/76/733 87/73/733 334/309/733
+f 335/310/734 88/78/734 86/77/734
+f 83/79/735 85/76/735 330/311/735
+f 331/312/736 86/77/736 84/82/736
+f 330/311/737 336/301/737 338/296/737
+f 339/299/738 337/304/738 331/312/738
+f 334/309/739 340/305/739 336/301/739
+f 335/310/740 331/312/740 337/304/740
+f 332/313/741 338/296/741 328/315/741
+f 333/314/742 327/317/742 329/300/742
+f 81/83/743 83/79/743 332/313/743
+f 333/314/744 84/82/744 82/86/744
+f 342/318/745 344/402/745 215/203/745
+f 343/319/746 210/202/746 216/204/746
+f 326/316/747 342/318/747 209/201/747
+f 327/317/748 82/86/748 210/202/748
+f 215/203/749 344/402/749 346/321/749
+f 216/204/750 80/91/750 347/322/750
+f 346/321/751 300/293/751 92/94/751
+f 347/322/752 80/91/752 93/323/752
+f 324/324/753 352/330/753 304/325/753
+f 325/327/754 77/345/754 304/328/754
+f 352/330/755 350/396/755 78/331/755
+f 353/329/756 304/328/756 78/332/756
+f 78/331/757 350/396/757 348/334/757
+f 349/336/758 351/333/758 78/332/758
+f 305/335/759 348/334/759 328/315/759
+f 329/300/760 349/336/760 305/337/760
+f 328/315/761 348/334/761 342/318/761
+f 329/300/762 327/317/762 343/319/762
+f 296/291/763 298/290/763 318/338/763
+f 319/340/764 299/292/764 297/289/764
+f 316/342/765 324/324/765 77/326/765
+f 317/344/766 76/356/766 77/345/766
+f 358/346/767 356/378/767 303/347/767
+f 359/349/768 302/383/768 303/350/768
+f 303/347/769 356/378/769 354/352/769
+f 355/354/770 357/351/770 303/350/770
+f 75/353/771 354/352/771 316/342/771
+f 317/344/772 355/354/772 75/355/772
+f 292/357/773 294/285/773 362/358/773
+f 363/360/774 295/287/774 293/361/774
+f 364/359/775 362/358/775 368/363/775
+f 369/365/776 363/360/776 365/362/776
+f 366/364/777 368/363/777 370/367/777
+f 371/369/778 369/365/778 367/366/778
+f 372/368/779 370/367/779 376/371/779
+f 377/373/780 371/369/780 373/370/780
+f 378/375/781 374/372/781 376/371/781
+f 379/377/782 315/552/782 377/373/782
+f 316/342/783 354/352/783 374/372/783
+f 375/374/784 355/354/784 317/344/784
+f 354/352/785 356/378/785 372/368/785
+f 373/370/786 357/351/786 355/354/786
+f 356/378/787 358/346/787 366/364/787
+f 367/366/788 359/349/788 357/351/788
+f 358/346/789 360/379/789 364/359/789
+f 365/362/790 361/381/790 359/349/790
+f 292/357/791 364/359/791 360/379/791
+f 293/361/792 291/388/792 361/381/792
+f 360/379/793 358/346/793 302/348/793
+f 361/381/794 74/389/794 302/383/794
+f 284/384/795 286/553/795 288/385/795
+f 289/386/796 287/554/796 285/387/796
+f 284/384/797 290/380/797 360/379/797
+f 361/381/798 291/388/798 285/387/798
+f 296/291/799 310/339/799 362/358/799
+f 297/289/800 295/287/800 363/360/800
+f 310/339/801 312/392/801 368/363/801
+f 369/365/802 313/393/802 311/341/802
+f 312/392/803 382/394/803 370/367/803
+f 371/369/804 383/395/804 313/393/804
+f 376/371/805 370/367/805 382/394/805
+f 377/373/806 315/552/806 383/395/806
+f 350/396/807 386/406/807 384/397/807
+f 351/333/808 349/336/808 385/398/808
+f 384/397/809 386/406/809 320/400/809
+f 385/398/810 319/340/810 321/401/810
+f 298/290/811 300/293/811 384/397/811
+f 385/398/812 301/294/812 299/292/812
+f 300/293/813 344/402/813 342/318/813
+f 343/319/814 345/320/814 301/294/814
+f 322/403/815 380/407/815 378/375/815
+f 323/404/816 315/552/816 379/377/816
+f 378/375/817 380/407/817 324/324/817
+f 379/377/818 317/344/818 325/327/818
+f 386/406/819 380/407/819 322/403/819
+f 387/399/820 321/401/820 323/404/820
+f 352/330/821 380/407/821 386/406/821
+f 353/329/822 351/333/822 387/399/822
+f 388/408/823 414/455/823 402/409/823
+f 389/411/824 401/417/824 403/412/824
+f 400/410/825 402/409/825 404/414/825
+f 405/416/826 403/412/826 401/417/826
+f 404/414/827 406/422/827 396/419/827
+f 405/416/828 399/418/828 397/420/828
+f 406/422/829 408/426/829 394/423/829
+f 407/421/830 397/420/830 395/424/830
+f 408/426/831 410/434/831 392/427/831
+f 409/425/832 395/424/832 393/428/832
+f 392/427/833 410/434/833 412/430/833
+f 413/432/834 411/429/834 393/428/834
+f 410/434/835 420/437/835 418/435/835
+f 419/436/836 421/438/836 411/429/836
+f 408/426/837 422/505/837 420/437/837
+f 421/438/838 423/441/838 409/425/838
+f 424/439/839 422/505/839 408/426/839
+f 425/440/840 407/421/840 409/425/840
+f 426/442/841 424/439/841 406/422/841
+f 427/443/842 405/416/842 407/421/842
+f 428/444/843 426/442/843 404/414/843
+f 429/445/844 403/412/844 405/416/844
+f 402/409/845 414/455/845 416/446/845
+f 417/447/846 415/413/846 403/412/846
+f 320/400/847 444/480/847 442/448/847
+f 321/401/848 319/340/848 443/449/848
+f 390/431/849 412/430/849 444/451/849
+f 391/433/850 321/550/850 445/453/850
+f 310/339/851 318/338/851 442/448/851
+f 443/449/852 319/340/852 311/341/852
+f 382/454/853 430/471/853 414/455/853
+f 415/413/854 431/474/854 383/456/854
+f 412/430/855 418/435/855 440/457/855
+f 441/458/856 419/436/856 413/432/856
+f 446/459/857 444/451/857 440/457/857
+f 447/461/858 439/464/858 441/458/858
+f 434/462/859 446/459/859 438/460/859
+f 439/464/860 447/461/860 435/465/860
+f 448/467/861 446/459/861 434/462/861
+f 449/469/862 433/473/862 435/465/862
+f 448/467/863 432/468/863 450/470/863
+f 449/469/864 431/474/864 451/472/864
+f 430/471/865 450/470/865 416/446/865
+f 431/474/866 415/413/866 417/447/866
+f 312/392/867 448/477/867 430/475/867
+f 431/476/868 449/478/868 313/393/868
+f 442/448/869 446/481/869 448/477/869
+f 443/449/870 313/393/870 449/478/870
+f 416/446/871 450/470/871 452/482/871
+f 453/484/872 451/472/872 417/447/872
+f 432/468/873 462/488/873 452/482/873
+f 433/473/874 451/472/874 453/484/874
+f 432/468/421 434/462/421 460/487/421
+f 461/489/422 435/465/422 433/473/422
+f 436/463/875 458/491/875 460/487/875
+f 437/466/876 435/465/876 461/489/876
+f 438/460/877 456/494/877 458/491/877
+f 439/464/878 437/466/878 459/490/878
+f 438/460/879 440/457/879 454/493/879
+f 455/495/880 441/458/880 439/464/880
+f 440/457/881 418/435/881 474/496/881
+f 475/497/882 419/436/882 441/458/882
+f 428/444/883 416/446/883 476/483/883
+f 477/485/884 417/447/884 429/445/884
+f 426/442/885 428/444/885 464/498/885
+f 465/499/886 429/445/886 427/443/886
+f 424/439/887 426/442/887 466/500/887
+f 467/501/888 427/443/888 425/440/888
+f 424/439/889 468/502/889 470/504/889
+f 425/440/890 423/441/890 471/506/890
+f 422/505/891 470/504/891 472/507/891
+f 423/441/892 421/438/892 473/508/892
+f 420/437/893 472/507/893 474/496/893
+f 421/438/894 419/436/894 475/497/894
+f 456/494/895 480/512/895 478/509/895
+f 457/492/896 459/490/896 479/510/896
+f 480/512/897 482/555/897 484/513/897
+f 481/511/898 479/510/898 485/514/898
+f 484/513/899 482/555/899 488/516/899
+f 489/518/900 483/515/900 485/514/900
+f 488/516/901 490/523/901 492/520/901
+f 489/518/902 487/519/902 493/521/902
+f 464/498/903 476/483/903 486/517/903
+f 487/519/904 477/485/904 465/499/904
+f 484/513/905 486/517/905 476/483/905
+f 485/514/906 453/484/906 477/485/906
+f 462/488/907 478/509/907 484/513/907
+f 463/486/908 453/484/908 485/514/908
+f 458/491/909 478/509/909 462/488/909
+f 463/486/910 479/510/910 459/490/910
+f 474/496/911 480/512/911 456/494/911
+f 475/497/912 455/495/912 457/492/912
+f 472/507/913 482/555/913 480/512/913
+f 481/511/914 483/515/914 473/508/914
+f 488/516/915 482/555/915 472/507/915
+f 489/518/916 471/506/916 473/508/916
+f 490/523/917 488/516/917 470/504/917
+f 491/522/918 469/503/918 471/506/918
+f 466/500/919 492/520/919 490/523/919
+f 491/522/920 493/521/920 467/501/920
+f 392/427/921 390/431/921 504/524/921
+f 505/526/922 391/433/922 393/428/922
+f 394/423/923 392/427/923 502/525/923
+f 503/527/924 393/428/924 395/424/924
+f 394/423/925 500/528/925 498/530/925
+f 395/424/926 397/420/926 499/531/926
+f 396/419/927 498/530/927 496/532/927
+f 397/420/928 399/537/928 497/534/928
+f 398/533/929 496/532/929 494/535/929
+f 399/537/930 401/541/930 495/538/930
+f 400/536/931 494/535/931 506/539/931
+f 401/541/932 389/545/932 507/542/932
+f 502/525/933 504/524/933 506/539/933
+f 503/527/934 495/538/934 507/542/934
+f 494/535/935 496/532/935 500/528/935
+f 501/529/936 497/534/936 495/538/936
+f 382/394/937 388/556/937 506/543/937
+f 383/544/938 315/548/938 507/542/938
+f 314/546/939 506/539/939 504/524/939
+f 505/526/940 507/542/940 315/548/940
+f 320/452/941 322/547/941 504/524/941
+f 505/526/942 323/549/942 321/550/942
diff --git a/aswebglue/examples/Obj/monkey.zip b/aswebglue/examples/Obj/monkey.zip
new file mode 100644
index 0000000..c63e4a6
Binary files /dev/null and b/aswebglue/examples/Obj/monkey.zip differ
diff --git a/aswebglue/examples/Obj/obj.ts b/aswebglue/examples/Obj/obj.ts
new file mode 100644
index 0000000..7dea3c7
--- /dev/null
+++ b/aswebglue/examples/Obj/obj.ts
@@ -0,0 +1,122 @@
+/**
+ * @author Rick Battagline / https://embed.com
+ */
+
+import {
+ WebGLRenderingContext,
+ WebGLShader,
+ WebGLProgram,
+ ImageData,
+ WebGLBuffer,
+ GLint,
+ WebGLUniformLocation,
+} from '../../WebGL';
+
+import {Suzanne_data} from './Suzanne';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision mediump float;
+
+ in vec3 position;
+ in vec3 normal;
+ out vec4 c;
+
+ void main() {
+ const vec3 light = vec3(0.25, 2.0, -0.5);
+ float d = clamp( dot( normal, light ), 0.0, 1.0);
+ vec4 pos = vec4( position, 1.0 );
+
+ mat4 mRotateTranslate = mat4(
+ 1.0, 0.0, 0.0, 0.0, // column 1
+ 0.0, cos(-0.2),-sin(-0.2), -0.2, // column 2
+ 0.0, sin(-0.0), cos(-0.2), 0.0, // column 3
+ 0.0, 0.0, 0.0, 1.0 // column 4
+ );
+
+ gl_Position = pos * mRotateTranslate;
+ c = vec4(max(d, 0.2), max(d, 0.2), max(d, 0.25), 1.0);
+ }
+`;
+
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+// initialize webgl
+var gl = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let normal_al: GLint = gl.getAttribLocation(program, 'normal');
+gl.enableVertexAttribArray(normal_al);
+
+gl.enable(gl.DEPTH_TEST);
+
+// I'M DUPLICATING A LOT OF VERTICES HERE.
+// INDEXES WOULD BE BETTER
+
+function rotate(theta: f32): void {
+ for (var coord_i: i32 = 0; coord_i < Suzanne_data.length; coord_i += 6) {
+ let x: f32 = Suzanne_data[coord_i];
+ let z: f32 = Suzanne_data[coord_i + 2];
+
+ let nx: f32 = Suzanne_data[coord_i + 3];
+ let nz: f32 = Suzanne_data[coord_i + 5];
+
+ let x1: f32 = x * Mathf.cos(theta) - z * Mathf.sin(theta);
+ let z1: f32 = z * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ let nx1: f32 = nx * Mathf.cos(theta) - nz * Mathf.sin(theta);
+ let nz1: f32 = nz * Mathf.cos(theta) + nx * Mathf.sin(theta);
+
+ Suzanne_data[coord_i] = x1;
+ Suzanne_data[coord_i + 2] = z1;
+
+ Suzanne_data[coord_i + 3] = nx1;
+ Suzanne_data[coord_i + 5] = nz1;
+ }
+
+ return;
+}
+
+export function displayLoop(delta: i32): void {
+ let r: f32 = delta / 10000.0;
+ rotate(r);
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+ gl.bufferData(gl.ARRAY_BUFFER, Suzanne_data, gl.DYNAMIC_DRAW);
+ // dimensions | data_type | normalize | stride | offset
+ gl.vertexAttribPointer(position_al, 3, gl.FLOAT, +false, 24, 0);
+ gl.vertexAttribPointer(normal_al, 3, gl.FLOAT, +false, 24, 12);
+ gl.drawArrays(gl.TRIANGLES, 0, Suzanne_data.length / 6);
+}
diff --git a/aswebglue/examples/Obj/obj.zip b/aswebglue/examples/Obj/obj.zip
new file mode 100644
index 0000000..ad7935c
Binary files /dev/null and b/aswebglue/examples/Obj/obj.zip differ
diff --git a/aswebglue/examples/Obj/teapot.obj.txt b/aswebglue/examples/Obj/teapot.obj.txt
new file mode 100644
index 0000000..c839837
--- /dev/null
+++ b/aswebglue/examples/Obj/teapot.obj.txt
@@ -0,0 +1,9965 @@
+v -3.000000 1.800000 0.000000
+v -2.991600 1.800000 -0.081000
+v -2.991600 1.800000 0.081000
+v -2.989450 1.666162 0.000000
+v -2.985000 1.921950 0.000000
+v -2.985000 1.921950 0.000000
+v -2.981175 1.667844 -0.081000
+v -2.981175 1.667844 0.081000
+v -2.976687 1.920243 -0.081000
+v -2.976687 1.920243 0.081000
+v -2.968800 1.800000 -0.144000
+v -2.968800 1.800000 0.144000
+v -2.958713 1.672406 -0.144000
+v -2.958713 1.672406 0.144000
+v -2.957600 1.534800 0.000000
+v -2.957600 1.534800 0.000000
+v -2.954122 1.915609 -0.144000
+v -2.954122 1.915609 0.144000
+v -2.949693 1.537790 -0.081000
+v -2.949693 1.537790 0.081000
+v -2.940000 2.019600 0.000000
+v -2.935200 1.800000 -0.189000
+v -2.935200 1.800000 0.189000
+v -2.931958 2.016526 0.081000
+v -2.931958 2.016526 -0.081000
+v -2.928230 1.545907 -0.144000
+v -2.928230 1.545907 0.144000
+v -2.925611 1.679131 -0.189000
+v -2.925611 1.679131 0.189000
+v -2.920870 1.908779 -0.189000
+v -2.920870 1.908779 0.189000
+v -2.910131 2.008181 -0.144000
+v -2.910131 2.008181 0.144000
+v -2.904150 1.406137 0.000000
+v -2.904150 1.406137 0.000000
+v -2.896846 1.410135 0.081000
+v -2.896846 1.410135 -0.081000
+v -2.896602 1.557869 -0.189000
+v -2.896602 1.557869 0.189000
+v -2.894400 1.800000 -0.216000
+v -2.894400 1.800000 0.216000
+v -2.885416 1.687296 -0.216000
+v -2.885416 1.687296 0.216000
+v -2.880491 1.900487 -0.216000
+v -2.880491 1.900487 0.216000
+v -2.877965 1.995883 -0.189000
+v -2.877965 1.995883 0.189000
+v -2.877022 1.420985 -0.144000
+v -2.877022 1.420985 0.144000
+v -2.865000 2.095650 0.000000
+v -2.858195 1.572394 0.216000
+v -2.858195 1.572394 -0.216000
+v -2.857432 2.091511 -0.081000
+v -2.857432 2.091511 0.081000
+v -2.850000 1.800000 -0.225000
+v -2.850000 1.800000 0.225000
+v -2.847806 1.436974 0.189000
+v -2.847806 1.436974 -0.189000
+v -2.841675 1.696181 0.225000
+v -2.841675 1.696181 -0.225000
+v -2.838906 1.980950 -0.216000
+v -2.838906 1.980950 0.216000
+v -2.836889 2.080276 -0.144000
+v -2.836889 2.080276 0.144000
+v -2.836550 1.891463 -0.225000
+v -2.836550 1.891463 0.225000
+v -2.828800 1.280400 0.000000
+v -2.822326 1.285171 -0.081000
+v -2.822326 1.285171 0.081000
+v -2.816400 1.588200 -0.225000
+v -2.816400 1.588200 0.225000
+v -2.812331 1.456390 0.216000
+v -2.812331 1.456390 -0.216000
+v -2.806615 2.063720 -0.189000
+v -2.806615 2.063720 0.189000
+v -2.805600 1.800000 -0.216000
+v -2.805600 1.800000 0.216000
+v -2.804755 1.298122 -0.144000
+v -2.804755 1.298122 0.144000
+v -2.797934 1.705067 -0.216000
+v -2.797934 1.705067 0.216000
+v -2.796400 1.964700 0.225000
+v -2.796400 1.964700 -0.225000
+v -2.792609 1.882438 -0.216000
+v -2.792609 1.882438 0.216000
+v -2.778861 1.317206 -0.189000
+v -2.778861 1.317206 0.189000
+v -2.774605 1.604006 0.216000
+v -2.774605 1.604006 -0.216000
+v -2.773725 1.477519 0.225000
+v -2.773725 1.477519 -0.225000
+v -2.769854 2.043616 -0.216000
+v -2.769854 2.043616 0.216000
+v -2.764800 1.800000 -0.189000
+v -2.764800 1.800000 0.189000
+v -2.760000 2.152800 0.000000
+v -2.760000 2.152800 0.000000
+v -2.757739 1.713232 -0.189000
+v -2.757739 1.713232 0.189000
+v -2.753894 1.948450 -0.216000
+v -2.753894 1.948450 0.216000
+v -2.753123 2.147861 -0.081000
+v -2.753123 2.147861 0.081000
+v -2.752230 1.874146 -0.189000
+v -2.752230 1.874146 0.189000
+v -2.747418 1.340381 -0.216000
+v -2.747418 1.340381 0.216000
+v -2.736198 1.618531 -0.189000
+v -2.736198 1.618531 0.189000
+v -2.735119 1.498648 0.216000
+v -2.735119 1.498648 -0.216000
+v -2.734458 2.134454 -0.144000
+v -2.734458 2.134454 0.144000
+v -2.731250 1.157813 0.000000
+v -2.731250 1.157813 0.000000
+v -2.731200 1.800000 -0.144000
+v -2.731200 1.800000 0.144000
+v -2.729850 2.021737 -0.225000
+v -2.729850 2.021737 0.225000
+v -2.725825 1.163194 0.081000
+v -2.725825 1.163194 -0.081000
+v -2.724637 1.719956 -0.144000
+v -2.724637 1.719956 0.144000
+v -2.718978 1.867316 -0.144000
+v -2.718978 1.867316 0.144000
+v -2.714835 1.933517 -0.189000
+v -2.714835 1.933517 0.189000
+v -2.713200 1.365600 -0.225000
+v -2.713200 1.365600 0.225000
+v -2.711100 1.177800 -0.144000
+v -2.711100 1.177800 0.144000
+v -2.708400 1.800000 -0.081000
+v -2.708400 1.800000 0.081000
+v -2.706950 2.114698 -0.189000
+v -2.706950 2.114698 0.189000
+v -2.704570 1.630493 -0.144000
+v -2.704570 1.630493 0.144000
+v -2.702175 1.724519 -0.081000
+v -2.702175 1.724519 0.081000
+v -2.700000 1.800000 0.000000
+v -2.699644 1.518063 0.189000
+v -2.699644 1.518063 -0.189000
+v -2.696413 1.862682 -0.081000
+v -2.696413 1.862682 0.081000
+v -2.693900 1.726200 0.000000
+v -2.689846 1.999859 -0.216000
+v -2.689846 1.999859 0.216000
+v -2.689400 1.199325 -0.189000
+v -2.689400 1.199325 0.189000
+v -2.688100 1.860975 0.000000
+v -2.688100 1.860975 0.000000
+v -2.683107 1.638610 -0.081000
+v -2.683107 1.638610 0.081000
+v -2.682669 1.921219 -0.144000
+v -2.682669 1.921219 0.144000
+v -2.678982 1.390819 -0.216000
+v -2.678982 1.390819 0.216000
+v -2.675200 1.641600 0.000000
+v -2.675200 1.641600 0.000000
+v -2.673549 2.090707 -0.216000
+v -2.673549 2.090707 0.216000
+v -2.670428 1.534053 -0.144000
+v -2.670428 1.534053 0.144000
+v -2.663050 1.225463 -0.216000
+v -2.663050 1.225463 0.216000
+v -2.660842 1.912874 0.081000
+v -2.660842 1.912874 -0.081000
+v -2.653085 1.979755 -0.189000
+v -2.653085 1.979755 0.189000
+v -2.652800 1.909800 0.000000
+v -2.652800 1.909800 0.000000
+v -2.650604 1.544903 0.081000
+v -2.650604 1.544903 -0.081000
+v -2.647539 1.413994 -0.189000
+v -2.647539 1.413994 0.189000
+v -2.643300 1.548900 0.000000
+v -2.637200 2.064600 -0.225000
+v -2.637200 2.064600 0.225000
+v -2.634375 1.253906 0.225000
+v -2.634375 1.253906 -0.225000
+v -2.625000 2.193750 0.000000
+v -2.622811 1.963199 -0.144000
+v -2.622811 1.963199 0.144000
+v -2.621645 1.433078 -0.144000
+v -2.621645 1.433078 0.144000
+v -2.619050 2.188238 -0.081000
+v -2.619050 2.188238 0.081000
+v -2.611200 1.038600 0.000000
+v -2.611200 1.038600 0.000000
+v -2.607034 1.044497 0.081000
+v -2.607034 1.044497 -0.081000
+v -2.605700 1.282350 -0.216000
+v -2.605700 1.282350 0.216000
+v -2.604074 1.446029 -0.081000
+v -2.604074 1.446029 0.081000
+v -2.602900 2.173275 -0.144000
+v -2.602900 2.173275 0.144000
+v -2.602268 1.951964 -0.081000
+v -2.602268 1.951964 0.081000
+v -2.600851 2.038493 -0.216000
+v -2.600851 2.038493 0.216000
+v -2.597600 1.450800 0.000000
+v -2.595725 1.060502 -0.144000
+v -2.595725 1.060502 0.144000
+v -2.594700 1.947825 0.000000
+v -2.579350 1.308488 -0.189000
+v -2.579350 1.308488 0.189000
+v -2.579100 2.151225 -0.189000
+v -2.579100 2.151225 0.189000
+v -2.579059 1.084090 -0.189000
+v -2.579059 1.084090 0.189000
+v -2.567450 2.014502 -0.189000
+v -2.567450 2.014502 0.189000
+v -2.558822 1.112731 0.216000
+v -2.558822 1.112731 -0.216000
+v -2.557650 1.330013 -0.144000
+v -2.557650 1.330013 0.144000
+v -2.550200 2.124450 -0.216000
+v -2.550200 2.124450 0.216000
+v -2.542925 1.344619 0.081000
+v -2.542925 1.344619 -0.081000
+v -2.539942 1.994746 -0.144000
+v -2.539942 1.994746 0.144000
+v -2.537500 1.350000 0.000000
+v -2.537500 1.350000 0.000000
+v -2.536800 1.143900 0.225000
+v -2.536800 1.143900 -0.225000
+v -2.521277 1.981339 -0.081000
+v -2.521277 1.981339 0.081000
+v -2.518750 2.095312 -0.225000
+v -2.518750 2.095312 0.225000
+v -2.514778 1.175069 0.216000
+v -2.514778 1.175069 -0.216000
+v -2.514400 1.976400 0.000000
+v -2.514400 1.976400 0.000000
+v -2.494541 1.203710 -0.189000
+v -2.494541 1.203710 0.189000
+v -2.487300 2.066175 -0.216000
+v -2.487300 2.066175 0.216000
+v -2.477875 1.227298 -0.144000
+v -2.477875 1.227298 0.144000
+v -2.468350 0.922987 0.000000
+v -2.466566 1.243303 0.081000
+v -2.466566 1.243303 -0.081000
+v -2.465644 0.929375 -0.081000
+v -2.465644 0.929375 0.081000
+v -2.462400 1.249200 0.000000
+v -2.462400 1.249200 0.000000
+v -2.460000 2.221200 0.000000
+v -2.460000 2.221200 0.000000
+v -2.458400 2.039400 -0.189000
+v -2.458400 2.039400 0.189000
+v -2.458298 0.946711 -0.144000
+v -2.458298 0.946711 0.144000
+v -2.455229 2.215303 -0.081000
+v -2.455229 2.215303 0.081000
+v -2.447474 0.972260 0.189000
+v -2.447474 0.972260 -0.189000
+v -2.442278 2.199298 -0.144000
+v -2.442278 2.199298 0.144000
+v -2.434600 2.017350 -0.144000
+v -2.434600 2.017350 0.144000
+v -2.434329 1.003283 -0.216000
+v -2.434329 1.003283 0.216000
+v -2.423194 2.175710 -0.189000
+v -2.423194 2.175710 0.189000
+v -2.420025 1.037044 -0.225000
+v -2.420025 1.037044 0.225000
+v -2.418450 2.002387 -0.081000
+v -2.418450 2.002388 0.081000
+v -2.412500 1.996875 0.000000
+v -2.412500 1.996875 0.000000
+v -2.405721 1.070804 -0.216000
+v -2.405721 1.070804 0.216000
+v -2.400019 2.147069 -0.216000
+v -2.400019 2.147069 0.216000
+v -2.392576 1.101828 -0.189000
+v -2.392576 1.101828 0.189000
+v -2.381752 1.127376 -0.144000
+v -2.381752 1.127376 0.144000
+v -2.374800 2.115900 -0.225000
+v -2.374800 2.115900 0.225000
+v -2.374406 1.144713 0.081000
+v -2.374406 1.144713 -0.081000
+v -2.371700 1.151100 0.000000
+v -2.349581 2.084731 -0.216000
+v -2.349581 2.084731 0.216000
+v -2.326406 2.056090 -0.189000
+v -2.326406 2.056090 0.189000
+v -2.307322 2.032502 -0.144000
+v -2.307322 2.032502 0.144000
+v -2.302400 0.811200 0.000000
+v -2.302400 0.811200 0.000000
+v -2.301347 0.818122 0.081000
+v -2.301347 0.818122 -0.081000
+v -2.298490 0.836909 0.144000
+v -2.298490 0.836909 -0.144000
+v -2.294371 2.016497 -0.081000
+v -2.294371 2.016497 0.081000
+v -2.294278 0.864595 0.189000
+v -2.294278 0.864595 -0.189000
+v -2.289600 2.010600 0.000000
+v -2.289600 2.010600 0.000000
+v -2.289165 0.898214 0.216000
+v -2.289165 0.898214 -0.216000
+v -2.283600 0.934800 0.225000
+v -2.283600 0.934800 -0.225000
+v -2.278035 0.971386 0.216000
+v -2.278035 0.971386 -0.216000
+v -2.272922 1.005005 0.189000
+v -2.272922 1.005005 -0.189000
+v -2.268710 1.032691 -0.144000
+v -2.268710 1.032691 0.144000
+v -2.265853 1.051478 0.081000
+v -2.265853 1.051478 -0.081000
+v -2.265000 2.237850 0.000000
+v -2.264800 1.058400 0.000000
+v -2.264800 1.058400 0.000000
+v -2.261676 2.231720 -0.081000
+v -2.261676 2.231720 0.081000
+v -2.252655 2.215082 -0.144000
+v -2.252655 2.215082 0.144000
+v -2.239361 2.190562 -0.189000
+v -2.239361 2.190562 0.189000
+v -2.223218 2.160788 -0.216000
+v -2.223218 2.160788 0.216000
+v -2.205650 2.128387 0.225000
+v -2.205650 2.128388 -0.225000
+v -2.188082 2.095987 -0.216000
+v -2.188082 2.095987 0.216000
+v -2.171939 2.066213 -0.189000
+v -2.171939 2.066213 0.189000
+v -2.158645 2.041693 -0.144000
+v -2.158645 2.041693 0.144000
+v -2.149624 2.025055 -0.081000
+v -2.149624 2.025055 0.081000
+v -2.146300 2.018925 0.000000
+v -2.141100 0.973800 0.000000
+v -2.141100 0.973800 0.000000
+v -2.140315 0.966231 0.081000
+v -2.140315 0.966231 -0.081000
+v -2.138183 0.945685 0.144000
+v -2.138183 0.945685 -0.144000
+v -2.135041 0.915407 0.189000
+v -2.135041 0.915407 -0.189000
+v -2.131226 0.878641 0.216000
+v -2.131226 0.878641 -0.216000
+v -2.127075 0.838631 0.225000
+v -2.127075 0.838631 -0.225000
+v -2.122924 0.798621 0.216000
+v -2.122924 0.798621 -0.216000
+v -2.119109 0.761855 0.189000
+v -2.119109 0.761855 -0.189000
+v -2.115967 0.731578 0.144000
+v -2.115967 0.731578 -0.144000
+v -2.113835 0.711032 0.081000
+v -2.113835 0.711032 -0.081000
+v -2.113050 0.703463 0.000000
+v -2.113050 0.703463 0.000000
+v -2.040000 2.246400 0.000000
+v -2.040000 2.246400 0.000000
+v -2.038410 2.240150 -0.081000
+v -2.038410 2.240150 0.081000
+v -2.034093 2.223187 -0.144000
+v -2.034093 2.223187 0.144000
+v -2.027731 2.198189 -0.189000
+v -2.027731 2.198189 0.189000
+v -2.020006 2.167834 0.216000
+v -2.020006 2.167834 -0.216000
+v -2.011600 2.134800 0.225000
+v -2.011600 2.134800 -0.225000
+v -2.003194 2.101766 0.216000
+v -2.003194 2.101766 -0.216000
+v -2.000000 0.900000 0.000000
+v -2.000000 0.900000 0.000000
+v -2.000000 0.900000 0.000000
+v -1.997200 0.891600 0.081000
+v -1.997200 0.891600 -0.081000
+v -1.995469 2.071411 -0.189000
+v -1.995469 2.071411 0.189000
+v -1.992750 1.037175 -0.000000
+v -1.992750 1.037175 0.000000
+v -1.989600 0.868800 0.144000
+v -1.989600 0.868800 -0.144000
+v -1.989107 2.046413 0.144000
+v -1.989107 2.046413 -0.144000
+v -1.986000 0.771675 0.000000
+v -1.986000 0.771675 0.000000
+v -1.984790 2.029450 -0.081000
+v -1.984790 2.029450 0.081000
+v -1.983200 2.023200 0.000000
+v -1.983200 2.023200 0.000000
+v -1.978400 0.835200 0.189000
+v -1.978400 0.835200 -0.189000
+v -1.974240 0.900000 -0.328160
+v -1.974240 0.900000 -0.328160
+v -1.974240 0.900000 0.328160
+v -1.972000 1.178400 -0.000000
+v -1.972000 1.178400 0.000000
+v -1.967083 1.037175 -0.326970
+v -1.967083 1.037175 0.326970
+v -1.964800 0.794400 0.216000
+v -1.964800 0.794400 -0.216000
+v -1.960420 0.771675 -0.325863
+v -1.960420 0.771675 0.325863
+v -1.950000 0.750000 -0.225000
+v -1.950000 0.750000 0.225000
+v -1.948000 0.656400 0.000000
+v -1.948000 0.656400 0.000000
+v -1.946601 1.178400 -0.323566
+v -1.946601 1.178400 0.323566
+v -1.939250 1.323225 0.000000
+v -1.939250 1.323225 0.000000
+v -1.935200 0.705600 0.216000
+v -1.935200 0.705600 -0.216000
+v -1.922910 0.656400 -0.319628
+v -1.922910 0.656400 0.319628
+v -1.921600 0.664800 0.189000
+v -1.921600 0.664800 -0.189000
+v -1.914272 1.323225 -0.318192
+v -1.914272 1.323225 0.318192
+v -1.910400 0.631200 0.144000
+v -1.910400 0.631200 -0.144000
+v -1.902800 0.608400 0.081000
+v -1.902800 0.608400 -0.081000
+v -1.900000 0.600000 0.000000
+v -1.900000 0.600000 0.000000
+v -1.899520 0.900000 -0.638080
+v -1.899520 0.900000 -0.638080
+v -1.899520 0.900000 0.638080
+v -1.899520 0.900000 0.638080
+v -1.896000 1.471200 0.000000
+v -1.896000 1.471200 0.000000
+v -1.892634 1.037175 -0.635767
+v -1.892634 1.037175 0.635767
+v -1.892000 0.553725 0.000000
+v -1.892000 0.553725 0.000000
+v -1.886223 0.771675 -0.633613
+v -1.886223 0.771675 0.633613
+v -1.872927 1.178400 -0.629147
+v -1.872927 1.178400 0.629147
+v -1.871580 1.471200 -0.311096
+v -1.871580 1.471200 0.311096
+v -1.867631 0.553725 -0.310439
+v -1.867631 0.553725 0.310439
+v -1.850132 0.656400 -0.621490
+v -1.850132 0.656400 0.621490
+v -1.843750 1.621875 0.000000
+v -1.843750 1.621875 0.000000
+v -1.841822 1.323225 -0.618698
+v -1.841822 1.323225 0.618698
+v -1.824000 0.463200 -0.000000
+v -1.824000 0.463200 0.000000
+v -1.820003 1.621875 -0.302522
+v -1.820003 1.621875 0.302523
+v -1.800900 2.024775 0.000000
+v -1.800745 1.471200 -0.604900
+v -1.800745 1.471200 0.604900
+v -1.800507 0.463200 -0.299282
+v -1.800507 0.463200 0.299282
+v -1.800455 2.031069 -0.081000
+v -1.800455 2.031069 0.081000
+v -1.799246 2.048152 -0.144000
+v -1.799246 2.048152 0.144000
+v -1.797466 2.073326 -0.189000
+v -1.797466 2.073326 0.189000
+v -1.796946 0.553725 -0.603624
+v -1.796946 0.553725 0.603624
+v -1.795303 2.103896 -0.216000
+v -1.795303 2.103896 0.216000
+v -1.792950 2.137163 -0.225000
+v -1.792950 2.137163 0.225000
+v -1.790597 2.170429 -0.216000
+v -1.790597 2.170429 0.216000
+v -1.788434 2.200999 -0.189000
+v -1.788434 2.200999 0.189000
+v -1.786654 2.226173 -0.144000
+v -1.786654 2.226173 0.144000
+v -1.785445 2.243256 -0.081000
+v -1.785445 2.243256 0.081000
+v -1.785000 2.249550 0.000000
+v -1.784000 1.774800 -0.000000
+v -1.784000 1.774800 0.000000
+v -1.779680 0.900000 -0.925920
+v -1.779680 0.900000 -0.925920
+v -1.779680 0.900000 0.925920
+v -1.779680 0.900000 0.925920
+v -1.773229 1.037175 -0.922564
+v -1.773229 1.037175 0.922564
+v -1.767222 0.771675 -0.919439
+v -1.767222 0.771675 0.919439
+v -1.761022 1.774800 -0.292719
+v -1.761022 1.774800 0.292719
+v -1.754764 1.178400 -0.912957
+v -1.754764 1.178400 0.912957
+v -1.751120 1.621875 -0.588230
+v -1.751120 1.621875 0.588230
+v -1.750000 0.384375 -0.000000
+v -1.750000 0.384375 0.000000
+v -1.733408 0.656400 -0.901846
+v -1.733408 0.656400 0.901846
+v -1.732362 0.463200 -0.581929
+v -1.732362 0.463200 0.581929
+v -1.727460 0.384375 -0.287140
+v -1.727460 0.384375 0.287140
+v -1.725622 1.323225 -0.897795
+v -1.725622 1.323225 0.897795
+v -1.718250 1.929525 -0.000000
+v -1.718250 1.929525 0.000000
+v -1.696119 1.929525 -0.281930
+v -1.696119 1.929525 0.281930
+v -1.694372 1.774800 -0.569167
+v -1.694372 1.774800 0.569167
+v -1.687137 1.471200 -0.877772
+v -1.687137 1.471200 0.877772
+v -1.683577 0.553725 -0.875920
+v -1.683577 0.553725 0.875920
+v -1.676000 0.316800 0.000000
+v -1.676000 0.316800 0.000000
+v -1.662080 0.384375 -0.558320
+v -1.662080 0.384375 0.558320
+v -1.654413 0.316800 -0.274998
+v -1.654413 0.316800 0.274998
+v -1.648000 2.085600 0.000000
+v -1.648000 2.085600 0.000000
+v -1.640643 1.621875 -0.853583
+v -1.640643 1.621875 0.853583
+v -1.631925 1.929525 -0.548190
+v -1.631925 1.929525 0.548190
+v -1.626774 2.085600 -0.270404
+v -1.626774 2.085600 0.270404
+v -1.623068 0.463200 -0.844439
+v -1.623068 0.463200 0.844439
+v -1.618560 0.900000 -1.187840
+v -1.618560 0.900000 -1.187840
+v -1.618560 0.900000 1.187840
+v -1.618560 0.900000 1.187840
+v -1.612693 1.037175 -1.183534
+v -1.612693 1.037175 1.183534
+v -1.608000 0.260025 -0.000000
+v -1.608000 0.260025 0.000000
+v -1.607230 0.771675 -1.179525
+v -1.607230 0.771675 1.179525
+v -1.600000 2.025000 0.000000
+v -1.597200 2.031300 -0.081000
+v -1.597200 2.031300 0.081000
+v -1.595900 1.178400 -1.171210
+v -1.595900 1.178400 1.171210
+v -1.591798 0.316800 -0.534711
+v -1.591798 0.316800 0.534711
+v -1.589600 2.048400 -0.144000
+v -1.589600 2.048400 0.144000
+v -1.587475 1.774800 -0.825921
+v -1.587475 1.774800 0.825921
+v -1.587289 0.260025 0.263841
+v -1.587289 0.260025 -0.263841
+v -1.578400 2.073600 -0.189000
+v -1.578400 2.073600 0.189000
+v -1.576477 0.656400 -1.156956
+v -1.576477 0.656400 1.156956
+v -1.574750 2.242575 0.000000
+v -1.574750 2.242575 0.000000
+v -1.569396 1.323225 -1.151759
+v -1.569396 1.323225 1.151759
+v -1.565204 2.085600 -0.525778
+v -1.565204 2.085600 0.525778
+v -1.564800 2.104200 -0.216000
+v -1.564800 2.104200 0.216000
+v -1.557220 0.384375 -0.810180
+v -1.557220 0.384375 0.810180
+v -1.554467 2.242575 -0.258385
+v -1.554467 2.242575 0.258385
+v -1.552000 0.213600 0.000000
+v -1.552000 0.213600 0.000000
+v -1.550000 2.137500 -0.225000
+v -1.550000 2.137500 0.225000
+v -1.535200 2.170800 -0.216000
+v -1.535200 2.170800 0.216000
+v -1.534395 1.471200 -1.126072
+v -1.534395 1.471200 1.126072
+v -1.532010 0.213600 0.254652
+v -1.532010 0.213600 -0.254652
+v -1.531158 0.553725 -1.123697
+v -1.531158 0.553725 1.123697
+v -1.528968 1.929525 -0.795481
+v -1.528968 1.929525 0.795481
+v -1.527214 0.260025 -0.513016
+v -1.527214 0.260025 0.513016
+v -1.521600 2.201400 -0.189000
+v -1.521600 2.201400 0.189000
+v -1.514000 0.177075 0.000000
+v -1.514000 0.177075 0.000000
+v -1.510400 2.226600 -0.144000
+v -1.510400 2.226600 0.144000
+v -1.502800 2.243700 -0.081000
+v -1.502800 2.243700 0.081000
+v -1.500000 2.400000 0.000000
+v -1.500000 0.150000 0.000000
+v -1.500000 2.250000 0.000000
+v -1.500000 2.400000 0.000000
+v -1.500000 0.150000 0.000000
+v -1.496475 0.127575 -0.000000
+v -1.496475 0.127575 0.000000
+v -1.495635 2.242575 -0.502408
+v -1.495635 2.242575 0.502408
+v -1.494500 0.177075 0.248417
+v -1.494500 0.177075 -0.248417
+v -1.492110 1.621875 -1.095040
+v -1.492110 1.621875 1.095040
+v -1.491372 0.316800 -0.775921
+v -1.491372 0.316800 0.775921
+v -1.480800 0.105600 0.000000
+v -1.480800 0.105600 -0.000000
+v -1.480680 2.400000 -0.246120
+v -1.480680 0.150000 0.246120
+v -1.480680 2.400000 0.246120
+v -1.480680 0.150000 -0.246120
+v -1.480680 0.150000 -0.246120
+v -1.480680 0.150000 0.246120
+v -1.480325 2.435437 0.000000
+v -1.480325 2.435437 0.000000
+v -1.477200 0.127575 0.245542
+v -1.477200 0.127575 -0.245542
+v -1.476127 0.463200 -1.083310
+v -1.476127 0.463200 1.083310
+v -1.474028 0.213600 0.495150
+v -1.474028 0.213600 -0.495150
+v -1.466456 2.085600 -0.762958
+v -1.466456 2.085600 0.762958
+v -1.461727 0.105600 -0.242970
+v -1.461727 0.105600 0.242970
+v -1.461258 2.435437 -0.242892
+v -1.461258 2.435437 0.242892
+v -1.459600 2.463000 0.000000
+v -1.459600 2.463000 0.000000
+v -1.445325 0.084525 0.000000
+v -1.445325 0.084525 0.000000
+v -1.443756 1.774800 -1.059553
+v -1.443756 1.774800 1.059553
+v -1.440800 2.463000 -0.239491
+v -1.440800 2.463000 0.239491
+v -1.439025 2.482687 0.000000
+v -1.437937 0.177075 0.483027
+v -1.437937 0.177075 -0.483027
+v -1.430863 0.260025 0.744440
+v -1.430863 0.260025 -0.744440
+v -1.426709 0.084525 -0.237149
+v -1.426709 0.084525 0.237149
+v -1.424640 2.400000 -0.478560
+v -1.424640 0.150000 -0.478560
+v -1.424640 0.150000 -0.478560
+v -1.424640 0.150000 0.478560
+v -1.424640 0.150000 0.478560
+v -1.424640 2.400000 0.478560
+v -1.421292 0.127575 0.477435
+v -1.421292 0.127575 -0.477435
+v -1.420490 2.482687 -0.236115
+v -1.420490 2.482687 0.236115
+v -1.420000 0.900000 -1.420000
+v -1.420000 0.900000 -1.420000
+v -1.420000 0.900000 1.420000
+v -1.420000 0.900000 1.420000
+v -1.419800 2.494500 0.000000
+v -1.419800 2.494500 0.000000
+v -1.416240 0.384375 -1.039360
+v -1.416240 0.384375 1.039360
+v -1.414853 1.037175 -1.414853
+v -1.414853 1.037175 1.414853
+v -1.410060 0.771675 -1.410060
+v -1.410060 0.771675 1.410060
+v -1.406405 0.105600 -0.472434
+v -1.406405 0.105600 0.472434
+v -1.405953 2.435437 -0.472283
+v -1.405953 2.435437 0.472283
+v -1.403125 2.498438 0.000000
+v -1.403125 2.498438 0.000000
+v -1.401513 2.494500 -0.232961
+v -1.401513 2.494500 0.232961
+v -1.401276 2.242575 -0.729046
+v -1.401276 2.242575 0.729046
+v -1.400120 1.178400 -1.400120
+v -1.400120 1.178400 1.400120
+v -1.400000 2.400000 0.000000
+v -1.400000 2.400000 0.000000
+v -1.390545 1.929525 -1.020503
+v -1.390545 1.929525 1.020503
+v -1.390200 2.494500 0.000000
+v -1.390200 2.494500 0.000000
+v -1.386270 2.463000 -0.465671
+v -1.386270 2.463000 0.465671
+v -1.385925 2.435437 0.000000
+v -1.385925 2.435437 0.000000
+v -1.385053 2.498438 -0.230225
+v -1.385053 2.498438 0.230225
+v -1.383080 0.656400 -1.383080
+v -1.383080 0.656400 1.383080
+v -1.382400 0.064800 -0.000000
+v -1.382400 0.064800 0.000000
+v -1.382225 2.482687 -0.000000
+v -1.382225 2.482687 0.000000
+v -1.381968 2.400000 -0.229712
+v -1.381968 2.400000 0.229712
+v -1.381032 0.213600 0.718514
+v -1.381032 0.213600 -0.718514
+v -1.380400 2.463000 0.000000
+v -1.380400 2.463000 0.000000
+v -1.376868 1.323225 -1.376867
+v -1.376867 1.323225 1.376868
+v -1.372712 0.084525 -0.461116
+v -1.372712 0.084525 0.461116
+v -1.372294 2.494500 -0.228104
+v -1.372294 2.494500 0.228104
+v -1.368074 2.435437 -0.227403
+v -1.368074 2.435437 0.227403
+v -1.366728 2.482687 -0.459107
+v -1.366728 2.482687 0.459107
+v -1.364595 0.064800 -0.226824
+v -1.364595 0.064800 0.226824
+v -1.364422 2.482687 -0.226795
+v -1.364422 2.482687 0.226795
+v -1.362620 2.463000 -0.226496
+v -1.362620 2.463000 0.226496
+v -1.356353 0.316800 -0.995410
+v -1.356353 0.316800 0.995410
+v -1.348469 2.494500 -0.452973
+v -1.348469 2.494500 0.452973
+v -1.347218 0.177075 0.700921
+v -1.347218 0.177075 -0.700921
+v -1.346160 1.471200 -1.346160
+v -1.346160 1.471200 1.346160
+v -1.343320 0.553725 -1.343320
+v -1.343320 0.553725 1.343320
+v -1.334760 2.400000 -0.694440
+v -1.334760 0.150000 -0.694440
+v -1.334760 0.150000 0.694440
+v -1.334760 0.150000 0.694440
+v -1.334760 2.400000 0.694440
+v -1.334760 0.150000 -0.694440
+v -1.333693 2.085600 -0.978780
+v -1.333693 2.085600 0.978780
+v -1.332632 2.498438 -0.447653
+v -1.332632 2.498438 0.447653
+v -1.331623 0.127575 0.692808
+v -1.331623 0.127575 -0.692808
+v -1.329664 2.400000 -0.446656
+v -1.329664 2.400000 0.446656
+v -1.320356 2.494500 -0.443529
+v -1.320356 2.494500 0.443529
+v -1.317675 0.105600 -0.685551
+v -1.317675 0.105600 0.685551
+v -1.317252 2.435437 -0.685331
+v -1.317252 2.435437 0.685331
+v -1.316296 2.435437 -0.442166
+v -1.316296 2.435437 0.442166
+v -1.312948 0.064800 0.441041
+v -1.312948 0.064800 -0.441041
+v -1.312782 2.482687 -0.440985
+v -1.312782 2.482687 0.440985
+v -1.311049 2.463000 -0.440403
+v -1.311049 2.463000 0.440403
+v -1.309063 1.621875 -1.309063
+v -1.309063 1.621875 1.309063
+v -1.301322 0.260025 0.955023
+v -1.301322 0.260025 -0.955023
+v -1.300000 2.400000 0.000000
+v -1.300000 2.400000 0.000000
+v -1.298810 2.463000 -0.675736
+v -1.298810 2.463000 0.675736
+v -1.295040 0.463200 -1.295040
+v -1.295040 0.463200 1.295040
+v -1.286108 0.084525 -0.669128
+v -1.286108 0.084525 0.669128
+v -1.284375 0.046875 0.000000
+v -1.284375 0.046875 0.000000
+v -1.283256 2.400000 -0.213304
+v -1.283256 2.400000 0.213304
+v -1.280502 2.482687 -0.666211
+v -1.280502 2.482687 0.666211
+v -1.274600 2.440800 0.000000
+v -1.274600 2.440800 0.000000
+v -1.274414 2.242575 -0.935276
+v -1.274414 2.242575 0.935276
+v -1.267832 0.046875 -0.210740
+v -1.267832 0.046875 0.210740
+v -1.266640 1.774800 -1.266640
+v -1.266640 1.774800 1.266640
+v -1.263395 2.494500 -0.657311
+v -1.263395 2.494500 0.657311
+v -1.258183 2.440800 0.209136
+v -1.258183 2.440800 -0.209136
+v -1.256003 0.213600 0.921764
+v -1.256003 0.213600 -0.921764
+v -1.248557 2.498438 -0.649591
+v -1.248557 2.498438 0.649591
+v -1.245776 2.400000 -0.648144
+v -1.245776 2.400000 0.648144
+v -1.242500 0.384375 -1.242500
+v -1.242500 0.384375 1.242500
+v -1.237056 2.494500 -0.643607
+v -1.237056 2.494500 0.643607
+v -1.234688 2.400000 -0.414752
+v -1.234688 2.400000 0.414752
+v -1.233252 2.435437 -0.641628
+v -1.233252 2.435437 0.641628
+v -1.230115 0.064800 -0.639996
+v -1.230115 0.064800 0.639996
+v -1.229959 2.482687 -0.639915
+v -1.229959 2.482687 0.639915
+v -1.228335 2.463000 -0.639070
+v -1.228335 2.463000 0.639070
+v -1.225250 0.177075 0.899195
+v -1.225250 0.177075 -0.899195
+v -1.219958 1.929525 1.219958
+v -1.219958 1.929525 -1.219958
+v -1.219848 0.046875 -0.409767
+v -1.219848 0.046875 0.409767
+v -1.213920 2.400000 -0.890880
+v -1.213920 0.150000 -0.890880
+v -1.213920 0.150000 -0.890880
+v -1.213920 0.150000 0.890880
+v -1.213920 0.150000 0.890880
+v -1.213920 2.400000 0.890880
+v -1.211067 0.127575 0.888786
+v -1.211067 0.127575 -0.888786
+v -1.210564 2.440800 0.406648
+v -1.210564 2.440800 -0.406648
+v -1.204800 2.474400 0.000000
+v -1.204800 2.474400 0.000000
+v -1.198382 0.105600 -0.879477
+v -1.198382 0.105600 0.879477
+v -1.197997 2.435437 -0.879195
+v -1.197997 2.435437 0.879195
+v -1.189960 0.316800 -1.189960
+v -1.189960 0.316800 1.189960
+v -1.189282 2.474400 -0.197684
+v -1.189282 2.474400 0.197684
+v -1.187840 0.900000 -1.618560
+v -1.187840 0.900000 -1.618560
+v -1.187840 0.900000 1.618560
+v -1.187840 0.900000 1.618560
+v -1.183534 1.037175 -1.612693
+v -1.183534 1.037175 1.612693
+v -1.181225 2.463000 -0.866886
+v -1.181225 2.463000 0.866886
+v -1.179525 0.771675 -1.607230
+v -1.179525 0.771675 1.607230
+v -1.171210 1.178400 -1.595900
+v -1.171210 1.178400 1.595900
+v -1.170080 2.085600 -1.170080
+v -1.170080 2.085600 1.170080
+v -1.169673 0.084525 -0.858407
+v -1.169673 0.084525 0.858407
+v -1.164574 2.482687 -0.854666
+v -1.164574 2.482687 0.854666
+v -1.156956 0.656400 -1.576477
+v -1.156956 0.656400 1.576477
+v -1.156792 2.400000 -0.601848
+v -1.156792 2.400000 0.601848
+v -1.151759 1.323225 -1.569396
+v -1.151759 1.323225 1.569396
+v -1.149016 2.494500 -0.843248
+v -1.149016 2.494500 0.843248
+v -1.144271 2.474400 -0.384379
+v -1.144271 2.474400 0.384379
+v -1.143600 0.031200 0.000000
+v -1.143600 0.031200 0.000000
+v -1.142888 0.046875 -0.594614
+v -1.142888 0.046875 0.594614
+v -1.141680 0.260025 1.141680
+v -1.141680 0.260025 -1.141680
+v -1.135521 2.498438 -0.833344
+v -1.135521 2.498438 0.833344
+v -1.134190 2.440800 0.590089
+v -1.134190 2.440800 -0.590089
+v -1.132992 2.400000 -0.831488
+v -1.132992 2.400000 0.831488
+v -1.128870 0.031200 -0.187642
+v -1.128870 0.031200 0.187642
+v -1.126072 1.471200 -1.534395
+v -1.126072 1.471200 1.534395
+v -1.125061 2.494500 -0.825668
+v -1.125061 2.494500 0.825668
+v -1.123697 0.553725 -1.531158
+v -1.123697 0.553725 1.531158
+v -1.121601 2.435437 -0.823129
+v -1.121601 2.435437 0.823129
+v -1.118749 0.064800 -0.821035
+v -1.118749 0.064800 0.821035
+v -1.118607 2.482687 -0.820931
+v -1.118607 2.482687 0.820931
+v -1.118073 2.242575 -1.118073
+v -1.118073 2.242575 1.118073
+v -1.117130 2.463000 -0.819847
+v -1.117130 2.463000 0.819847
+v -1.101920 0.213600 1.101920
+v -1.101920 0.213600 -1.101920
+v -1.100200 2.502600 0.000000
+v -1.100200 2.502600 0.000000
+v -1.095040 1.621875 -1.492110
+v -1.095040 1.621875 1.492110
+v -1.086146 0.031200 0.364854
+v -1.086146 0.031200 -0.364854
+v -1.086029 2.502600 0.180521
+v -1.086029 2.502600 -0.180521
+v -1.083310 0.463200 -1.476127
+v -1.083310 0.463200 1.476127
+v -1.074940 0.177075 -1.074940
+v -1.074940 0.177075 1.074940
+v -1.072079 2.474400 -0.557774
+v -1.072079 2.474400 0.557774
+v -1.065000 2.400000 -1.065000
+v -1.065000 0.150000 -1.065000
+v -1.065000 0.150000 1.065000
+v -1.065000 2.400000 1.065000
+v -1.062497 0.127575 1.062497
+v -1.062497 0.127575 -1.062497
+v -1.059553 1.774800 -1.443756
+v -1.059553 1.774800 1.443756
+v -1.052064 2.400000 -0.772096
+v -1.052064 2.400000 0.772096
+v -1.051368 0.105600 -1.051368
+v -1.051368 0.105600 1.051368
+v -1.051031 2.435437 -1.051031
+v -1.051031 2.435437 1.051031
+v -1.044926 2.502600 -0.351008
+v -1.044926 2.502600 0.351008
+v -1.039419 0.046875 -0.762816
+v -1.039419 0.046875 0.762816
+v -1.039360 0.384375 -1.416240
+v -1.039360 0.384375 1.416240
+v -1.036316 2.463000 -1.036316
+v -1.036316 2.463000 1.036316
+v -1.031508 2.440800 0.757010
+v -1.031508 2.440800 -0.757010
+v -1.026181 0.084525 -1.026181
+v -1.026181 0.084525 1.026181
+v -1.021708 2.482687 -1.021708
+v -1.021708 2.482687 1.021708
+v -1.020503 1.929525 -1.390545
+v -1.020503 1.929525 1.390545
+v -1.017621 0.031200 0.529441
+v -1.017621 0.031200 -0.529441
+v -1.008058 2.494500 -1.008058
+v -1.008058 2.494500 1.008058
+v -0.996219 2.498438 -0.996219
+v -0.996219 2.498438 0.996219
+v -0.995410 0.316800 -1.356353
+v -0.995410 0.316800 1.356353
+v -0.994000 2.400000 -0.994000
+v -0.994000 2.400000 0.994000
+v -0.987042 2.494500 -0.987042
+v -0.987042 2.494500 0.987042
+v -0.984007 2.435437 -0.984007
+v -0.984007 2.435437 0.984007
+v -0.981504 0.064800 0.981504
+v -0.981504 0.064800 -0.981504
+v -0.981380 2.482687 -0.981380
+v -0.981380 2.482687 0.981380
+v -0.980084 2.463000 -0.980084
+v -0.980084 2.463000 0.980084
+v -0.979002 2.502600 0.509349
+v -0.979002 2.502600 -0.509349
+v -0.978780 2.085600 -1.333693
+v -0.978780 2.085600 1.333693
+v -0.975021 2.474400 -0.715555
+v -0.975021 2.474400 0.715555
+v -0.970400 2.527200 0.000000
+v -0.970400 2.527200 0.000000
+v -0.957901 2.527200 -0.159223
+v -0.957901 2.527200 0.159223
+v -0.955023 0.260025 1.301322
+v -0.955023 0.260025 -1.301322
+v -0.952425 0.018225 -0.000000
+v -0.952425 0.018225 0.000000
+v -0.940158 0.018225 0.156274
+v -0.940158 0.018225 -0.156274
+v -0.935276 2.242575 -1.274414
+v -0.935276 2.242575 1.274414
+v -0.925920 0.900000 -1.779680
+v -0.925920 0.900000 1.779680
+v -0.925920 0.900000 1.779680
+v -0.925920 0.900000 -1.779680
+v -0.925493 0.031200 0.679207
+v -0.925493 0.031200 -0.679207
+v -0.923000 2.400000 -0.923000
+v -0.923000 2.400000 0.923000
+v -0.922564 1.037175 1.773229
+v -0.922564 1.037175 -1.773229
+v -0.921764 0.213600 1.256003
+v -0.921764 0.213600 -1.256003
+v -0.921647 2.527200 -0.309596
+v -0.921647 2.527200 0.309596
+v -0.919439 0.771675 -1.767222
+v -0.919439 0.771675 1.767222
+v -0.912957 1.178400 -1.754764
+v -0.912957 1.178400 1.754764
+v -0.911906 0.046875 -0.911906
+v -0.911906 0.046875 0.911906
+v -0.904966 2.440800 0.904966
+v -0.904966 2.440800 -0.904966
+v -0.904575 0.018225 0.303862
+v -0.904575 0.018225 -0.303862
+v -0.901846 0.656400 -1.733408
+v -0.901846 0.656400 1.733408
+v -0.899195 0.177075 1.225250
+v -0.899195 0.177075 -1.225250
+v -0.897795 1.323225 -1.725622
+v -0.897795 1.323225 1.725622
+v -0.890880 0.150000 -1.213920
+v -0.890880 0.150000 1.213920
+v -0.890880 2.400000 -1.213920
+v -0.890880 0.150000 -1.213920
+v -0.890880 0.150000 1.213920
+v -0.890880 2.400000 1.213920
+v -0.890370 2.502600 -0.653431
+v -0.890370 2.502600 0.653431
+v -0.888786 0.127575 1.211067
+v -0.888786 0.127575 -1.211067
+v -0.879477 0.105600 -1.198382
+v -0.879477 0.105600 1.198382
+v -0.879195 2.435437 -1.197997
+v -0.879195 2.435437 1.197997
+v -0.877772 1.471200 -1.687137
+v -0.877772 1.471200 1.687137
+v -0.875920 0.553725 -1.683577
+v -0.875920 0.553725 1.683577
+v -0.866886 2.463000 -1.181225
+v -0.866886 2.463000 1.181225
+v -0.863501 2.527200 -0.449256
+v -0.863501 2.527200 0.449256
+v -0.858407 0.084525 -1.169673
+v -0.858407 0.084525 1.169673
+v -0.855408 2.474400 -0.855408
+v -0.855408 2.474400 0.855408
+v -0.854666 2.482687 -1.164574
+v -0.854666 2.482687 1.164574
+v -0.853583 1.621875 -1.640643
+v -0.853583 1.621875 1.640643
+v -0.847506 0.018225 -0.440935
+v -0.847506 0.018225 0.440935
+v -0.844439 0.463200 1.623068
+v -0.844439 0.463200 -1.623068
+v -0.843248 2.494500 -1.149016
+v -0.843248 2.494500 1.149016
+v -0.833344 2.498438 -1.135521
+v -0.833344 2.498438 1.135521
+v -0.831488 2.400000 -1.132992
+v -0.831488 2.400000 1.132992
+v -0.825921 1.774800 1.587475
+v -0.825921 1.774800 -1.587475
+v -0.825668 2.494500 -1.125061
+v -0.825668 2.494500 1.125061
+v -0.825000 2.550000 0.000000
+v -0.825000 2.550000 0.000000
+v -0.823129 2.435437 -1.121601
+v -0.823129 2.435437 1.121601
+v -0.821035 0.064800 1.118749
+v -0.821035 0.064800 -1.118749
+v -0.820931 2.482687 1.118607
+v -0.820931 2.482687 -1.118607
+v -0.819847 2.463000 -1.117130
+v -0.819847 2.463000 1.117130
+v -0.814374 2.550000 -0.135366
+v -0.814374 2.550000 0.135366
+v -0.811956 0.031200 0.811956
+v -0.811956 0.031200 -0.811956
+v -0.810180 0.384375 1.557220
+v -0.810180 0.384375 -1.557220
+v -0.795481 1.929525 1.528968
+v -0.795481 1.929525 -1.528968
+v -0.785325 2.527200 -0.576340
+v -0.785325 2.527200 0.576340
+v -0.783552 2.550000 -0.263208
+v -0.783552 2.550000 0.263208
+v -0.781142 2.502600 -0.781142
+v -0.781142 2.502600 0.781142
+v -0.775921 0.316800 -1.491372
+v -0.775921 0.316800 1.491372
+v -0.772096 2.400000 -1.052064
+v -0.772096 2.400000 1.052064
+v -0.770779 0.018225 0.565664
+v -0.770779 0.018225 -0.565664
+v -0.762958 2.085600 -1.466456
+v -0.762958 2.085600 1.466456
+v -0.762816 0.046875 -1.039419
+v -0.762816 0.046875 1.039419
+v -0.757010 2.440800 1.031508
+v -0.757010 2.440800 -1.031508
+v -0.744440 0.260025 1.430863
+v -0.744440 0.260025 -1.430863
+v -0.734118 2.550000 -0.381942
+v -0.734118 2.550000 0.381942
+v -0.729046 2.242575 -1.401276
+v -0.729046 2.242575 1.401276
+v -0.718514 0.213600 1.381032
+v -0.718514 0.213600 -1.381032
+v -0.715555 2.474400 -0.975021
+v -0.715555 2.474400 0.975021
+v -0.703200 0.008400 0.000000
+v -0.700921 0.177075 1.347218
+v -0.700921 0.177075 -1.347218
+v -0.694440 0.150000 -1.334760
+v -0.694440 0.150000 1.334760
+v -0.694440 2.400000 1.334760
+v -0.694440 0.150000 1.334760
+v -0.694440 2.400000 -1.334760
+v -0.694440 0.150000 -1.334760
+v -0.694143 0.008400 -0.115381
+v -0.694143 0.008400 0.115381
+v -0.692808 0.127575 1.331623
+v -0.692808 0.127575 -1.331623
+v -0.688984 2.527200 -0.688984
+v -0.688984 2.527200 0.688984
+v -0.685551 0.105600 -1.317675
+v -0.685551 0.105600 1.317675
+v -0.685331 2.435437 -1.317252
+v -0.685331 2.435437 1.317252
+v -0.679207 0.031200 -0.925493
+v -0.679207 0.031200 0.925493
+v -0.676222 0.018225 0.676222
+v -0.676222 0.018225 -0.676222
+v -0.675736 2.463000 -1.298810
+v -0.675736 2.463000 1.298810
+v -0.673600 2.572800 0.000000
+v -0.673600 2.572800 0.000000
+v -0.669128 0.084525 -1.286108
+v -0.669128 0.084525 1.286108
+v -0.667871 0.008400 -0.224349
+v -0.667871 0.008400 0.224349
+v -0.667656 2.550000 -0.489984
+v -0.667656 2.550000 0.489984
+v -0.666211 2.482687 1.280502
+v -0.666211 2.482687 -1.280502
+v -0.664924 2.572800 -0.110524
+v -0.664924 2.572800 0.110524
+v -0.657311 2.494500 -1.263395
+v -0.657311 2.494500 1.263395
+v -0.653431 2.502600 -0.890370
+v -0.653431 2.502600 0.890370
+v -0.649591 2.498438 -1.248557
+v -0.649591 2.498438 1.248557
+v -0.648144 2.400000 -1.245776
+v -0.648144 2.400000 1.245776
+v -0.643607 2.494500 -1.237056
+v -0.643607 2.494500 1.237056
+v -0.641628 2.435437 -1.233252
+v -0.641628 2.435437 1.233252
+v -0.639996 0.064800 -1.230115
+v -0.639996 0.064800 1.230115
+v -0.639915 2.482687 1.229959
+v -0.639915 2.482687 -1.229959
+v -0.639758 2.572800 -0.214905
+v -0.639758 2.572800 0.214905
+v -0.639070 2.463000 -1.228335
+v -0.639070 2.463000 1.228335
+v -0.638080 0.900000 -1.899520
+v -0.638080 0.900000 -1.899520
+v -0.638080 0.900000 1.899520
+v -0.638080 0.900000 1.899520
+v -0.635767 1.037175 -1.892634
+v -0.635767 1.037175 1.892634
+v -0.633613 0.771675 -1.886223
+v -0.633613 0.771675 1.886223
+v -0.629147 1.178400 -1.872927
+v -0.629147 1.178400 1.872927
+v -0.625735 0.008400 0.325553
+v -0.625735 0.008400 -0.325553
+v -0.621490 0.656400 -1.850132
+v -0.621490 0.656400 1.850132
+v -0.618698 1.323225 -1.841822
+v -0.618698 1.323225 1.841822
+v -0.604900 1.471200 -1.800745
+v -0.604900 1.471200 1.800745
+v -0.603624 0.553725 -1.796946
+v -0.603624 0.553725 1.796946
+v -0.601848 2.400000 -1.156792
+v -0.601848 2.400000 1.156792
+v -0.599396 2.572800 -0.311850
+v -0.599396 2.572800 0.311850
+v -0.594614 0.046875 -1.142888
+v -0.594614 0.046875 1.142888
+v -0.590089 2.440800 1.134190
+v -0.590089 2.440800 -1.134190
+v -0.588230 1.621875 -1.751120
+v -0.588230 1.621875 1.751120
+v -0.585750 2.550000 -0.585750
+v -0.585750 2.550000 0.585750
+v -0.581929 0.463200 -1.732362
+v -0.581929 0.463200 1.732362
+v -0.576340 2.527200 -0.785325
+v -0.576340 2.527200 0.785325
+v -0.569167 1.774800 -1.694372
+v -0.569167 1.774800 1.694372
+v -0.569086 0.008400 -0.417645
+v -0.569086 0.008400 0.417645
+v -0.565664 0.018225 0.770779
+v -0.565664 0.018225 -0.770779
+v -0.558320 0.384375 -1.662080
+v -0.558320 0.384375 1.662080
+v -0.557774 2.474400 -1.072079
+v -0.557774 2.474400 1.072079
+v -0.548190 1.929525 -1.631925
+v -0.548190 1.929525 1.631925
+v -0.545131 2.572800 -0.400065
+v -0.545131 2.572800 0.400065
+v -0.534711 0.316800 -1.591798
+v -0.534711 0.316800 1.591798
+v -0.529441 0.031200 -1.017621
+v -0.529441 0.031200 1.017621
+v -0.525800 2.597400 0.000000
+v -0.525800 2.597400 0.000000
+v -0.525778 2.085600 -1.565204
+v -0.525778 2.085600 1.565204
+v -0.519028 2.597400 0.086273
+v -0.519028 2.597400 -0.086273
+v -0.513016 0.260025 -1.527214
+v -0.513016 0.260025 1.527214
+v -0.509349 2.502600 0.979002
+v -0.509349 2.502600 -0.979002
+v -0.502408 2.242575 -1.495635
+v -0.502408 2.242575 1.495635
+v -0.499384 2.597400 -0.167751
+v -0.499384 2.597400 0.167751
+v -0.499272 0.008400 -0.499272
+v -0.499272 0.008400 0.499272
+v -0.495150 0.213600 -1.474028
+v -0.495150 0.213600 1.474028
+v -0.489984 2.550000 -0.667656
+v -0.489984 2.550000 0.667656
+v -0.483027 0.177075 -1.437937
+v -0.483027 0.177075 1.437937
+v -0.478560 0.150000 1.424640
+v -0.478560 2.400000 -1.424640
+v -0.478560 0.150000 -1.424640
+v -0.478560 0.150000 -1.424640
+v -0.478560 0.150000 1.424640
+v -0.478560 2.400000 1.424640
+v -0.478256 2.572800 -0.478256
+v -0.478256 2.572800 0.478256
+v -0.477435 0.127575 1.421292
+v -0.477435 0.127575 -1.421292
+v -0.472434 0.105600 1.406405
+v -0.472434 0.105600 -1.406405
+v -0.472283 2.435437 -1.405953
+v -0.472283 2.435437 1.405953
+v -0.467878 2.597400 -0.243424
+v -0.467878 2.597400 0.243424
+v -0.465671 2.463000 -1.386270
+v -0.465671 2.463000 1.386270
+v -0.461116 0.084525 1.372712
+v -0.461116 0.084525 -1.372712
+v -0.459107 2.482687 -1.366728
+v -0.459107 2.482687 1.366728
+v -0.452973 2.494500 -1.348469
+v -0.452973 2.494500 1.348469
+v -0.449256 2.527200 -0.863501
+v -0.449256 2.527200 0.863501
+v -0.447653 2.498438 -1.332632
+v -0.447653 2.498438 1.332632
+v -0.446656 2.400000 -1.329664
+v -0.446656 2.400000 1.329664
+v -0.443529 2.494500 -1.320356
+v -0.443529 2.494500 1.320356
+v -0.442166 2.435437 -1.316296
+v -0.442166 2.435437 1.316296
+v -0.441041 0.064800 1.312948
+v -0.441041 0.064800 -1.312948
+v -0.440985 2.482687 -1.312782
+v -0.440985 2.482687 1.312782
+v -0.440935 0.018225 0.847506
+v -0.440935 0.018225 -0.847506
+v -0.440403 2.463000 -1.311049
+v -0.440403 2.463000 1.311049
+v -0.425519 2.597400 0.312283
+v -0.425519 2.597400 -0.312283
+v -0.417645 0.008400 -0.569086
+v -0.417645 0.008400 0.569086
+v -0.414752 2.400000 -1.234688
+v -0.414752 2.400000 1.234688
+v -0.409767 0.046875 1.219848
+v -0.409767 0.046875 -1.219848
+v -0.406648 2.440800 -1.210564
+v -0.406648 2.440800 1.210564
+v -0.400065 2.572800 -0.545131
+v -0.400065 2.572800 0.545131
+v -0.391200 2.625600 0.000000
+v -0.391200 2.625600 0.000000
+v -0.388275 0.002175 -0.000000
+v -0.388275 0.002175 0.000000
+v -0.386161 2.625600 -0.064188
+v -0.386161 2.625600 0.064188
+v -0.384379 2.474400 -1.144271
+v -0.384379 2.474400 1.144271
+v -0.383274 0.002175 -0.063708
+v -0.383274 0.002175 0.063708
+v -0.381942 2.550000 -0.734118
+v -0.381942 2.550000 0.734118
+v -0.373318 2.597400 -0.373318
+v -0.373318 2.597400 0.373318
+v -0.371546 2.625600 -0.124808
+v -0.371546 2.625600 0.124808
+v -0.368768 0.002175 -0.123875
+v -0.368768 0.002175 0.123875
+v -0.364854 0.031200 1.086146
+v -0.364854 0.031200 -1.086146
+v -0.358400 3.034800 0.000000
+v -0.358400 3.034800 0.000000
+v -0.358200 3.081150 0.000000
+v -0.358200 3.081150 0.000000
+v -0.353807 3.034800 -0.059016
+v -0.353807 3.034800 0.059016
+v -0.353610 3.081150 -0.058988
+v -0.353610 3.081150 0.058988
+v -0.351008 2.502600 -1.044926
+v -0.351008 2.502600 1.044926
+v -0.348105 2.625600 -0.181110
+v -0.348105 2.625600 0.181110
+v -0.345503 0.002175 -0.179756
+v -0.345503 0.002175 0.179756
+v -0.340477 3.034800 -0.114676
+v -0.340477 3.034800 0.114676
+v -0.340289 3.081150 -0.114619
+v -0.340289 3.081150 0.114619
+v -0.328160 0.900000 -1.974240
+v -0.328160 0.900000 1.974240
+v -0.328160 0.900000 1.974240
+v -0.326970 1.037175 -1.967083
+v -0.326970 1.037175 1.967083
+v -0.325863 0.771675 -1.960420
+v -0.325863 0.771675 1.960420
+v -0.325553 0.008400 -0.625735
+v -0.325553 0.008400 0.625735
+v -0.325000 2.981250 0.000000
+v -0.325000 2.981250 0.000000
+v -0.323566 1.178400 -1.946601
+v -0.323566 1.178400 1.946601
+v -0.320834 2.981250 -0.053508
+v -0.320834 2.981250 0.053508
+v -0.319628 0.656400 -1.922910
+v -0.319628 0.656400 1.922910
+v -0.319082 3.034800 -0.166306
+v -0.319082 3.034800 0.166306
+v -0.318907 3.081150 -0.166221
+v -0.318907 3.081150 0.166221
+v -0.318192 1.323225 -1.914272
+v -0.318192 1.323225 1.914272
+v -0.316590 2.625600 -0.232342
+v -0.316590 2.625600 0.232342
+v -0.314223 0.002175 -0.230604
+v -0.314223 0.002175 0.230604
+v -0.312283 2.597400 -0.425519
+v -0.312283 2.597400 0.425519
+v -0.311850 2.572800 -0.599396
+v -0.311850 2.572800 0.599396
+v -0.311096 1.471200 -1.871580
+v -0.311096 1.471200 1.871580
+v -0.310439 0.553725 -1.867631
+v -0.310439 0.553725 1.867631
+v -0.309596 2.527200 -0.921647
+v -0.309596 2.527200 0.921647
+v -0.308800 3.117600 0.000000
+v -0.308800 3.117600 0.000000
+v -0.308744 2.981250 -0.103976
+v -0.308744 2.981250 0.103976
+v -0.304843 3.117600 -0.050855
+v -0.304843 3.117600 0.050855
+v -0.303862 0.018225 0.904575
+v -0.303862 0.018225 -0.904575
+v -0.302523 1.621875 -1.820003
+v -0.302522 1.621875 1.820003
+v -0.299282 0.463200 -1.800507
+v -0.299282 0.463200 1.800507
+v -0.293360 3.117600 -0.098814
+v -0.293360 3.117600 0.098814
+v -0.292719 1.774800 -1.761022
+v -0.292719 1.774800 1.761022
+v -0.290295 3.034800 -0.213234
+v -0.290295 3.034800 0.213234
+v -0.290138 3.081150 -0.213123
+v -0.290138 3.081150 0.213123
+v -0.289340 2.981250 -0.150793
+v -0.289340 2.981250 0.150793
+v -0.287140 0.384375 -1.727460
+v -0.287140 0.384375 1.727460
+v -0.281930 1.929525 1.696119
+v -0.281930 1.929525 -1.696119
+v -0.279400 2.659200 0.000000
+v -0.277752 2.625600 -0.277752
+v -0.277752 2.625600 0.277752
+v -0.275801 2.659200 -0.045844
+v -0.275801 2.659200 0.045844
+v -0.275675 0.002175 -0.275675
+v -0.275675 0.002175 0.275675
+v -0.274998 0.316800 -1.654413
+v -0.274998 0.316800 1.654413
+v -0.274928 3.117600 -0.143301
+v -0.274928 3.117600 0.143301
+v -0.273600 2.923200 0.000000
+v -0.273600 2.923200 0.000000
+v -0.270404 2.085600 -1.626774
+v -0.270404 2.085600 1.626774
+v -0.270092 2.923200 -0.045032
+v -0.270092 2.923200 0.045032
+v -0.265363 2.659200 -0.089140
+v -0.265363 2.659200 0.089140
+v -0.263841 0.260025 1.587289
+v -0.263841 0.260025 -1.587289
+v -0.263232 2.981250 -0.193348
+v -0.263232 2.981250 0.193348
+v -0.263208 2.550000 -0.783552
+v -0.263208 2.550000 0.783552
+v -0.259910 2.923200 -0.087511
+v -0.259910 2.923200 0.087511
+v -0.258385 2.242575 -1.554467
+v -0.258385 2.242575 1.554467
+v -0.254788 3.034800 -0.254788
+v -0.254788 3.034800 0.254788
+v -0.254653 3.081150 -0.254653
+v -0.254653 3.081150 0.254653
+v -0.254652 0.213600 -1.532010
+v -0.254652 0.213600 1.532010
+v -0.250127 3.117600 -0.183734
+v -0.250127 3.117600 0.183734
+v -0.248621 2.659200 0.129351
+v -0.248621 2.659200 -0.129351
+v -0.248417 0.177075 -1.494500
+v -0.248417 0.177075 1.494500
+v -0.246120 0.150000 1.480680
+v -0.246120 2.400000 -1.480680
+v -0.246120 0.150000 -1.480680
+v -0.246120 0.150000 -1.480680
+v -0.246120 0.150000 1.480680
+v -0.246120 2.400000 1.480680
+v -0.245542 0.127575 1.477200
+v -0.245542 0.127575 -1.477200
+v -0.243569 2.923200 -0.126920
+v -0.243569 2.923200 0.126920
+v -0.243424 2.597400 0.467878
+v -0.243424 2.597400 -0.467878
+v -0.242970 0.105600 1.461727
+v -0.242970 0.105600 -1.461727
+v -0.242892 2.435437 -1.461258
+v -0.242892 2.435437 1.461258
+v -0.239491 2.463000 -1.440800
+v -0.239491 2.463000 1.440800
+v -0.237149 0.084525 1.426709
+v -0.237149 0.084525 -1.426709
+v -0.236115 2.482687 -1.420490
+v -0.236115 2.482687 1.420490
+v -0.232961 2.494500 -1.401513
+v -0.232961 2.494500 1.401513
+v -0.232342 2.625600 -0.316590
+v -0.232342 2.625600 0.316590
+v -0.231031 2.981250 -0.231031
+v -0.231031 2.981250 0.231031
+v -0.230604 0.002175 -0.314223
+v -0.230604 0.002175 0.314223
+v -0.230225 2.498438 -1.385053
+v -0.230225 2.498438 1.385053
+v -0.229712 2.400000 -1.381968
+v -0.229712 2.400000 1.381968
+v -0.228104 2.494500 -1.372294
+v -0.228104 2.494500 1.372294
+v -0.227403 2.435437 -1.368074
+v -0.227403 2.435437 1.368074
+v -0.226824 0.064800 1.364595
+v -0.226824 0.064800 -1.364595
+v -0.226795 2.482687 1.364422
+v -0.226795 2.482687 -1.364422
+v -0.226496 2.463000 -1.362620
+v -0.226496 2.463000 1.362620
+v -0.226113 2.659200 -0.165941
+v -0.226113 2.659200 0.165941
+v -0.224349 0.008400 0.667871
+v -0.224349 0.008400 -0.667871
+v -0.221585 2.923200 -0.162745
+v -0.221585 2.923200 0.162745
+v -0.219800 2.863350 0.000000
+v -0.219800 2.863350 0.000000
+v -0.219536 3.117600 -0.219536
+v -0.219536 3.117600 0.219536
+v -0.216979 2.863350 0.036157
+v -0.216979 2.863350 -0.036157
+v -0.214905 2.572800 -0.639758
+v -0.214905 2.572800 0.639758
+v -0.213304 2.400000 -1.283256
+v -0.213304 2.400000 1.283256
+v -0.213234 3.034800 -0.290295
+v -0.213234 3.034800 0.290295
+v -0.213123 3.081150 -0.290138
+v -0.213123 3.081150 0.290138
+v -0.210740 0.046875 -1.267832
+v -0.210740 0.046875 1.267832
+v -0.209136 2.440800 -1.258183
+v -0.209136 2.440800 1.258183
+v -0.208794 2.863350 0.070270
+v -0.208794 2.863350 -0.070270
+v -0.200000 2.700000 0.000000
+v -0.200000 2.700000 0.000000
+v -0.200000 2.700000 0.000000
+v -0.200000 2.700000 0.000000
+v -0.198374 2.659200 -0.198374
+v -0.198374 2.659200 0.198374
+v -0.197684 2.474400 -1.189282
+v -0.197684 2.474400 1.189282
+v -0.197424 2.700000 -0.032816
+v -0.197424 2.700000 0.032816
+v -0.197424 2.700000 0.032816
+v -0.197424 2.700000 -0.032816
+v -0.195658 2.863350 -0.101925
+v -0.195658 2.863350 0.101925
+v -0.194600 3.141450 0.000000
+v -0.194600 3.141450 0.000000
+v -0.194472 2.923200 -0.194472
+v -0.194472 2.923200 0.194472
+v -0.193348 2.981250 -0.263232
+v -0.193348 2.981250 0.263232
+v -0.192107 3.141450 -0.032048
+v -0.192107 3.141450 0.032048
+v -0.189952 2.700000 -0.063808
+v -0.189952 2.700000 0.063808
+v -0.189952 2.700000 0.063808
+v -0.189952 2.700000 -0.063808
+v -0.187642 0.031200 1.128870
+v -0.187642 0.031200 -1.128870
+v -0.184870 3.141450 -0.062272
+v -0.184870 3.141450 0.062272
+v -0.183734 3.117600 -0.250127
+v -0.183734 3.117600 0.250127
+v -0.181110 2.625600 0.348105
+v -0.181110 2.625600 -0.348105
+v -0.180521 2.502600 -1.086029
+v -0.180521 2.502600 1.086029
+v -0.179756 0.002175 -0.345503
+v -0.179756 0.002175 0.345503
+v -0.179200 2.804400 0.000000
+v -0.179200 2.804400 0.000000
+v -0.177989 2.863350 -0.130707
+v -0.177989 2.863350 0.130707
+v -0.177968 2.700000 -0.092592
+v -0.177968 2.700000 0.092592
+v -0.177968 2.700000 0.092592
+v -0.177968 2.700000 -0.092592
+v -0.176897 2.804400 0.029450
+v -0.176897 2.804400 -0.029450
+v -0.173255 3.141450 -0.090306
+v -0.173255 3.141450 0.090306
+v -0.170215 2.804400 0.057246
+v -0.170215 2.804400 -0.057246
+v -0.167751 2.597400 -0.499384
+v -0.167751 2.597400 0.499384
+v -0.167400 2.749050 0.000000
+v -0.167400 2.749050 0.000000
+v -0.166306 3.034800 -0.319082
+v -0.166306 3.034800 0.319082
+v -0.166221 3.081150 0.318907
+v -0.166221 3.081150 -0.318907
+v -0.165941 2.659200 -0.226113
+v -0.165941 2.659200 0.226113
+v -0.165245 2.749050 0.027480
+v -0.165245 2.749050 -0.027480
+v -0.162745 2.923200 -0.221585
+v -0.162745 2.923200 0.221585
+v -0.161856 2.700000 -0.118784
+v -0.161856 2.700000 0.118784
+v -0.161856 2.700000 0.118784
+v -0.161856 2.700000 -0.118784
+v -0.159496 2.804400 0.083047
+v -0.159496 2.804400 -0.083047
+v -0.159223 2.527200 -0.957901
+v -0.159223 2.527200 0.957901
+v -0.158995 2.749050 0.053428
+v -0.158995 2.749050 -0.053428
+v -0.157626 3.141450 -0.115787
+v -0.157626 3.141450 0.115787
+v -0.156274 0.018225 0.940158
+v -0.156274 0.018225 -0.940158
+v -0.156200 2.863350 -0.156200
+v -0.156200 2.863350 0.156200
+v -0.150793 2.981250 -0.289340
+v -0.150793 2.981250 0.289340
+v -0.148969 2.749050 0.077523
+v -0.148969 2.749050 -0.077523
+v -0.145078 2.804400 0.106513
+v -0.145078 2.804400 -0.106513
+v -0.143301 3.117600 -0.274928
+v -0.143301 3.117600 0.274928
+v -0.142000 2.700000 -0.142000
+v -0.142000 2.700000 0.142000
+v -0.142000 2.700000 0.142000
+v -0.142000 2.700000 -0.142000
+v -0.138348 3.141450 -0.138348
+v -0.138348 3.141450 0.138348
+v -0.135489 2.749050 0.099446
+v -0.135489 2.749050 -0.099446
+v -0.135366 2.550000 -0.814374
+v -0.135366 2.550000 0.814374
+v -0.130707 2.863350 -0.177989
+v -0.130707 2.863350 0.177989
+v -0.129351 2.659200 0.248621
+v -0.129351 2.659200 -0.248621
+v -0.127304 2.804400 0.127304
+v -0.127304 2.804400 -0.127304
+v -0.126920 2.923200 -0.243569
+v -0.126920 2.923200 0.243569
+v -0.124808 2.625600 -0.371546
+v -0.124808 2.625600 0.371546
+v -0.123875 0.002175 0.368768
+v -0.123875 0.002175 -0.368768
+v -0.118874 2.749050 0.118874
+v -0.118874 2.749050 -0.118874
+v -0.118784 2.700000 -0.161856
+v -0.118784 2.700000 0.161856
+v -0.118784 2.700000 0.161856
+v -0.118784 2.700000 -0.161856
+v -0.115787 3.141450 -0.157626
+v -0.115787 3.141450 0.157626
+v -0.115381 0.008400 0.694143
+v -0.115381 0.008400 -0.694143
+v -0.114676 3.034800 -0.340477
+v -0.114676 3.034800 0.340477
+v -0.114619 3.081150 -0.340289
+v -0.114619 3.081150 0.340289
+v -0.110524 2.572800 -0.664924
+v -0.110524 2.572800 0.664924
+v -0.106513 2.804400 -0.145078
+v -0.106513 2.804400 0.145078
+v -0.103976 2.981250 -0.308744
+v -0.103976 2.981250 0.308744
+v -0.101925 2.863350 -0.195658
+v -0.101925 2.863350 0.195658
+v -0.099446 2.749050 0.135489
+v -0.099446 2.749050 -0.135489
+v -0.098814 3.117600 -0.293360
+v -0.098814 3.117600 0.293360
+v -0.092592 2.700000 -0.177968
+v -0.092592 2.700000 0.177968
+v -0.092592 2.700000 -0.177968
+v -0.092592 2.700000 0.177968
+v -0.090306 3.141450 -0.173255
+v -0.090306 3.141450 0.173255
+v -0.089140 2.659200 -0.265363
+v -0.089140 2.659200 0.265363
+v -0.087511 2.923200 -0.259910
+v -0.087511 2.923200 0.259910
+v -0.086273 2.597400 -0.519028
+v -0.086273 2.597400 0.519028
+v -0.083047 2.804400 -0.159496
+v -0.083047 2.804400 0.159496
+v -0.077523 2.749050 -0.148969
+v -0.077523 2.749050 0.148969
+v -0.070270 2.863350 -0.208794
+v -0.070270 2.863350 0.208794
+v -0.064188 2.625600 -0.386161
+v -0.064188 2.625600 0.386161
+v -0.063808 2.700000 -0.189952
+v -0.063808 2.700000 0.189952
+v -0.063808 2.700000 -0.189952
+v -0.063808 2.700000 0.189952
+v -0.063708 0.002175 0.383274
+v -0.063708 0.002175 -0.383274
+v -0.062272 3.141450 -0.184870
+v -0.062272 3.141450 0.184870
+v -0.059016 3.034800 -0.353807
+v -0.059016 3.034800 0.353807
+v -0.058988 3.081150 -0.353610
+v -0.058988 3.081150 0.353610
+v -0.057246 2.804400 -0.170215
+v -0.057246 2.804400 0.170215
+v -0.053508 2.981250 -0.320834
+v -0.053508 2.981250 0.320834
+v -0.053428 2.749050 -0.158995
+v -0.053428 2.749050 0.158995
+v -0.050855 3.117600 -0.304843
+v -0.050855 3.117600 0.304843
+v -0.045844 2.659200 -0.275801
+v -0.045844 2.659200 0.275801
+v -0.045032 2.923200 -0.270092
+v -0.045032 2.923200 0.270092
+v -0.036157 2.863350 -0.216979
+v -0.036157 2.863350 0.216979
+v -0.032816 2.700000 -0.197424
+v -0.032816 2.700000 0.197424
+v -0.032816 2.700000 -0.197424
+v -0.032816 2.700000 0.197424
+v -0.032048 3.141450 -0.192107
+v -0.032048 3.141450 0.192107
+v -0.029450 2.804400 -0.176897
+v -0.029450 2.804400 0.176897
+v -0.027480 2.749050 -0.165245
+v -0.027480 2.749050 0.165245
+v -0.000000 0.260025 1.608000
+v -0.000000 1.929525 1.718250
+v -0.000000 2.085600 -1.648000
+v -0.000000 0.656400 -1.948000
+v -0.000000 0.771675 -1.986000
+v -0.000000 2.482687 1.382225
+v -0.000000 2.700000 -0.200000
+v -0.000000 0.127575 1.496475
+v -0.000000 2.474400 -1.204800
+v -0.000000 2.749050 -0.167400
+v -0.000000 0.018225 0.952425
+v -0.000000 0.046875 -1.284375
+v -0.000000 0.064800 1.382400
+v -0.000000 0.384375 1.750000
+v -0.000000 0.463200 1.824000
+v -0.000000 0.553725 -1.892000
+v -0.000000 1.037175 1.992750
+v -0.000000 1.178400 1.972000
+v -0.000000 1.323225 -1.939250
+v -0.000000 1.621875 -1.843750
+v -0.000000 1.774800 1.784000
+v -0.000000 2.400000 -1.300000
+v -0.000000 2.435437 -1.480325
+v -0.000000 2.435437 -1.385925
+v -0.000000 2.463000 -1.459600
+v -0.000000 2.463000 -1.380400
+v -0.000000 2.494500 -1.390200
+v -0.000000 2.502600 -1.100200
+v -0.000000 2.804400 -0.179200
+v -0.000000 2.863350 -0.219800
+v -0.000000 2.572800 -0.673600
+v -0.000000 0.105600 1.480800
+v -0.000000 0.177075 -1.514000
+v -0.000000 2.494500 -1.419800
+v -0.000000 2.527200 -0.970400
+v -0.000000 2.923200 -0.273600
+v -0.000000 3.117600 -0.308800
+v -0.000000 2.597400 -0.525800
+v -0.000000 2.700000 -0.200000
+v -0.000000 2.981250 -0.325000
+v -0.000000 3.141450 -0.194600
+v -0.000000 0.002175 0.388275
+v -0.000000 3.081150 -0.358200
+v 0.000000 0.000000 0.000000
+v 0.000000 0.002175 -0.388275
+v 0.000000 0.002175 0.388275
+v 0.000000 0.008400 -0.703200
+v 0.000000 0.008400 0.703200
+v 0.000000 0.018225 -0.952425
+v 0.000000 0.018225 0.952425
+v 0.000000 0.031200 -1.143600
+v 0.000000 0.031200 -1.143600
+v 0.000000 0.031200 1.143600
+v 0.000000 0.031200 1.143600
+v 0.000000 0.046875 -1.284375
+v 0.000000 0.046875 1.284375
+v 0.000000 0.064800 -1.382400
+v 0.000000 0.064800 1.382400
+v 0.000000 0.084525 -1.445325
+v 0.000000 0.084525 -1.445325
+v 0.000000 0.084525 1.445325
+v 0.000000 0.084525 1.445325
+v 0.000000 0.105600 -1.480800
+v 0.000000 0.105600 1.480800
+v 0.000000 0.127575 -1.496475
+v 0.000000 0.127575 1.496475
+v 0.000000 0.150000 -1.500000
+v 0.000000 0.150000 -1.500000
+v 0.000000 0.150000 1.500000
+v 0.000000 0.150000 1.500000
+v 0.000000 0.177075 -1.514000
+v 0.000000 0.177075 1.514000
+v 0.000000 0.213600 -1.552000
+v 0.000000 0.213600 -1.552000
+v 0.000000 0.213600 1.552000
+v 0.000000 0.213600 1.552000
+v 0.000000 0.260025 -1.608000
+v 0.000000 0.260025 1.608000
+v 0.000000 0.316800 -1.676000
+v 0.000000 0.316800 -1.676000
+v 0.000000 0.316800 1.676000
+v 0.000000 0.316800 1.676000
+v 0.000000 0.384375 -1.750000
+v 0.000000 0.384375 1.750000
+v 0.000000 0.463200 -1.824000
+v 0.000000 0.463200 1.824000
+v 0.000000 0.553725 -1.892000
+v 0.000000 0.553725 1.892000
+v 0.000000 0.656400 -1.948000
+v 0.000000 0.656400 1.948000
+v 0.000000 0.771675 -1.986000
+v 0.000000 0.771675 1.986000
+v 0.000000 0.900000 -2.000000
+v 0.000000 0.900000 -2.000000
+v 0.000000 0.900000 2.000000
+v 0.000000 0.900000 2.000000
+v 0.000000 1.037175 -1.992750
+v 0.000000 1.037175 1.992750
+v 0.000000 1.178400 -1.972000
+v 0.000000 1.178400 1.972000
+v 0.000000 1.323225 -1.939250
+v 0.000000 1.323225 1.939250
+v 0.000000 1.471200 -1.896000
+v 0.000000 1.471200 -1.896000
+v 0.000000 1.471200 1.896000
+v 0.000000 1.471200 1.896000
+v 0.000000 1.621875 -1.843750
+v 0.000000 1.621875 1.843750
+v 0.000000 1.774800 -1.784000
+v 0.000000 1.774800 1.784000
+v 0.000000 1.929525 -1.718250
+v 0.000000 1.929525 1.718250
+v 0.000000 2.085600 -1.648000
+v 0.000000 2.085600 1.648000
+v 0.000000 2.242575 -1.574750
+v 0.000000 2.242575 -1.574750
+v 0.000000 2.242575 1.574750
+v 0.000000 2.242575 1.574750
+v 0.000000 2.400000 -1.500000
+v 0.000000 2.400000 -1.500000
+v 0.000000 2.400000 -1.400000
+v 0.000000 2.400000 -1.400000
+v 0.000000 2.400000 -1.300000
+v 0.000000 2.400000 1.300000
+v 0.000000 2.400000 1.400000
+v 0.000000 2.400000 1.400000
+v 0.000000 2.400000 1.500000
+v 0.000000 2.400000 1.500000
+v 0.000000 2.435437 -1.480325
+v 0.000000 2.435437 -1.385925
+v 0.000000 2.435437 1.385925
+v 0.000000 2.435437 1.480325
+v 0.000000 2.440800 -1.274600
+v 0.000000 2.440800 -1.274600
+v 0.000000 2.440800 1.274600
+v 0.000000 2.440800 1.274600
+v 0.000000 2.463000 -1.459600
+v 0.000000 2.463000 -1.380400
+v 0.000000 2.463000 1.380400
+v 0.000000 2.463000 1.459600
+v 0.000000 2.474400 -1.204800
+v 0.000000 2.474400 1.204800
+v 0.000000 2.482687 -1.439025
+v 0.000000 2.482687 -1.382225
+v 0.000000 2.482687 1.382225
+v 0.000000 2.482687 1.439025
+v 0.000000 2.494500 -1.419800
+v 0.000000 2.494500 -1.390200
+v 0.000000 2.494500 1.390200
+v 0.000000 2.494500 1.419800
+v 0.000000 2.498438 -1.403125
+v 0.000000 2.498438 -1.403125
+v 0.000000 2.498438 1.403125
+v 0.000000 2.498438 1.403125
+v 0.000000 2.502600 -1.100200
+v 0.000000 2.502600 1.100200
+v 0.000000 2.527200 -0.970400
+v 0.000000 2.527200 0.970400
+v 0.000000 2.550000 -0.825000
+v 0.000000 2.550000 -0.825000
+v 0.000000 2.550000 0.825000
+v 0.000000 2.550000 0.825000
+v 0.000000 2.572800 -0.673600
+v 0.000000 2.572800 0.673600
+v 0.000000 2.597400 -0.525800
+v 0.000000 2.597400 0.525800
+v 0.000000 2.625600 -0.391200
+v 0.000000 2.625600 -0.391200
+v 0.000000 2.625600 0.391200
+v 0.000000 2.625600 0.391200
+v 0.000000 2.659200 -0.279400
+v 0.000000 2.659200 0.279400
+v 0.000000 2.700000 -0.200000
+v 0.000000 2.700000 -0.200000
+v 0.000000 2.700000 0.200000
+v 0.000000 2.700000 0.200000
+v 0.000000 2.749050 -0.167400
+v 0.000000 2.749050 0.167400
+v 0.000000 2.804400 -0.179200
+v 0.000000 2.804400 0.179200
+v 0.000000 2.863350 -0.219800
+v 0.000000 2.863350 0.219800
+v 0.000000 2.923200 -0.273600
+v 0.000000 2.923200 0.273600
+v 0.000000 2.981250 -0.325000
+v 0.000000 2.981250 0.325000
+v 0.000000 3.034800 -0.358400
+v 0.000000 3.034800 -0.358400
+v 0.000000 3.034800 0.358400
+v 0.000000 3.034800 0.358400
+v 0.000000 3.081150 -0.358200
+v 0.000000 3.081150 0.358200
+v 0.000000 3.117600 -0.308800
+v 0.000000 3.117600 0.308800
+v 0.000000 3.141450 -0.194600
+v 0.000000 3.141450 0.194600
+v 0.000000 3.150000 0.000000
+v 0.000000 0.002175 -0.388275
+v 0.000000 3.081150 0.358200
+v 0.000000 2.597400 0.525800
+v 0.000000 2.700000 0.200000
+v 0.000000 2.981250 0.325000
+v 0.000000 3.141450 0.194600
+v 0.000000 3.117600 0.308800
+v 0.000000 0.105600 -1.480800
+v 0.000000 0.177075 1.514000
+v 0.000000 2.494500 1.419800
+v 0.000000 2.527200 0.970400
+v 0.000000 2.923200 0.273600
+v 0.000000 2.572800 0.673600
+v 0.000000 2.863350 0.219800
+v 0.000000 0.018225 -0.952425
+v 0.000000 0.046875 1.284375
+v 0.000000 0.064800 -1.382400
+v 0.000000 0.384375 -1.750000
+v 0.000000 0.463200 -1.824000
+v 0.000000 0.553725 1.892000
+v 0.000000 1.037175 -1.992750
+v 0.000000 1.178400 -1.972000
+v 0.000000 1.323225 1.939250
+v 0.000000 1.621875 1.843750
+v 0.000000 1.774800 -1.784000
+v 0.000000 2.400000 1.300000
+v 0.000000 2.435437 1.385925
+v 0.000000 2.435437 1.480325
+v 0.000000 2.463000 1.380400
+v 0.000000 2.463000 1.459600
+v 0.000000 2.494500 1.390200
+v 0.000000 2.502600 1.100200
+v 0.000000 2.804400 0.179200
+v 0.000000 2.749050 0.167400
+v 0.000000 0.127575 -1.496475
+v 0.000000 2.474400 1.204800
+v 0.000000 0.656400 1.948000
+v 0.000000 0.771675 1.986000
+v 0.000000 2.482687 -1.382225
+v 0.000000 2.700000 0.200000
+v 0.000000 0.260025 -1.608000
+v 0.000000 1.929525 -1.718250
+v 0.000000 2.085600 1.648000
+v 0.027480 2.749050 -0.165245
+v 0.027480 2.749050 0.165245
+v 0.029450 2.804400 -0.176897
+v 0.029450 2.804400 0.176897
+v 0.032048 3.141450 -0.192107
+v 0.032048 3.141450 0.192107
+v 0.032816 2.700000 -0.197424
+v 0.032816 2.700000 0.197424
+v 0.032816 2.700000 -0.197424
+v 0.032816 2.700000 0.197424
+v 0.036157 2.863350 -0.216979
+v 0.036157 2.863350 0.216979
+v 0.045032 2.923200 -0.270092
+v 0.045032 2.923200 0.270092
+v 0.045844 2.659200 -0.275801
+v 0.045844 2.659200 0.275801
+v 0.050855 3.117600 -0.304843
+v 0.050855 3.117600 0.304843
+v 0.053428 2.749050 -0.158995
+v 0.053428 2.749050 0.158995
+v 0.053508 2.981250 -0.320834
+v 0.053508 2.981250 0.320834
+v 0.057246 2.804400 -0.170215
+v 0.057246 2.804400 0.170215
+v 0.058988 3.081150 -0.353610
+v 0.058988 3.081150 0.353610
+v 0.059016 3.034800 -0.353807
+v 0.059016 3.034800 0.353807
+v 0.062272 3.141450 -0.184870
+v 0.062272 3.141450 0.184870
+v 0.063708 0.002175 0.383274
+v 0.063708 0.002175 -0.383274
+v 0.063808 2.700000 -0.189952
+v 0.063808 2.700000 0.189952
+v 0.063808 2.700000 -0.189952
+v 0.063808 2.700000 0.189952
+v 0.064188 2.625600 -0.386161
+v 0.064188 2.625600 0.386161
+v 0.070270 2.863350 -0.208794
+v 0.070270 2.863350 0.208794
+v 0.077523 2.749050 -0.148969
+v 0.077523 2.749050 0.148969
+v 0.083047 2.804400 -0.159496
+v 0.083047 2.804400 0.159496
+v 0.086273 2.597400 -0.519028
+v 0.086273 2.597400 0.519028
+v 0.087511 2.923200 -0.259910
+v 0.087511 2.923200 0.259910
+v 0.089140 2.659200 -0.265363
+v 0.089140 2.659200 0.265363
+v 0.090306 3.141450 -0.173255
+v 0.090306 3.141450 0.173255
+v 0.092592 2.700000 -0.177968
+v 0.092592 2.700000 0.177968
+v 0.092592 2.700000 -0.177968
+v 0.092592 2.700000 0.177968
+v 0.098814 3.117600 -0.293360
+v 0.098814 3.117600 0.293360
+v 0.099446 2.749050 0.135489
+v 0.099446 2.749050 -0.135489
+v 0.101925 2.863350 -0.195658
+v 0.101925 2.863350 0.195658
+v 0.103976 2.981250 -0.308744
+v 0.103976 2.981250 0.308744
+v 0.106513 2.804400 -0.145078
+v 0.106513 2.804400 0.145078
+v 0.110524 2.572800 -0.664924
+v 0.110524 2.572800 0.664924
+v 0.114619 3.081150 -0.340289
+v 0.114619 3.081150 0.340289
+v 0.114676 3.034800 -0.340477
+v 0.114676 3.034800 0.340477
+v 0.115381 0.008400 0.694143
+v 0.115381 0.008400 -0.694143
+v 0.115787 3.141450 -0.157626
+v 0.115787 3.141450 0.157626
+v 0.118784 2.700000 0.161856
+v 0.118784 2.700000 -0.161856
+v 0.118784 2.700000 -0.161856
+v 0.118784 2.700000 0.161856
+v 0.118874 2.749050 0.118874
+v 0.118874 2.749050 -0.118874
+v 0.123875 0.002175 0.368768
+v 0.123875 0.002175 -0.368768
+v 0.124808 2.625600 -0.371546
+v 0.124808 2.625600 0.371546
+v 0.126920 2.923200 -0.243569
+v 0.126920 2.923200 0.243569
+v 0.127304 2.804400 0.127304
+v 0.127304 2.804400 -0.127304
+v 0.129351 2.659200 0.248621
+v 0.129351 2.659200 -0.248621
+v 0.130707 2.863350 -0.177989
+v 0.130707 2.863350 0.177989
+v 0.135366 2.550000 -0.814374
+v 0.135366 2.550000 0.814374
+v 0.135489 2.749050 0.099446
+v 0.135489 2.749050 -0.099446
+v 0.138348 3.141450 -0.138348
+v 0.138348 3.141450 0.138348
+v 0.142000 2.700000 0.142000
+v 0.142000 2.700000 -0.142000
+v 0.142000 2.700000 -0.142000
+v 0.142000 2.700000 0.142000
+v 0.143301 3.117600 -0.274928
+v 0.143301 3.117600 0.274928
+v 0.145078 2.804400 0.106513
+v 0.145078 2.804400 -0.106513
+v 0.148969 2.749050 0.077523
+v 0.148969 2.749050 -0.077523
+v 0.150793 2.981250 -0.289340
+v 0.150793 2.981250 0.289340
+v 0.156200 2.863350 -0.156200
+v 0.156200 2.863350 0.156200
+v 0.156274 0.018225 0.940158
+v 0.156274 0.018225 -0.940158
+v 0.157626 3.141450 -0.115787
+v 0.157626 3.141450 0.115787
+v 0.158995 2.749050 0.053428
+v 0.158995 2.749050 -0.053428
+v 0.159223 2.527200 -0.957901
+v 0.159223 2.527200 0.957901
+v 0.159496 2.804400 0.083047
+v 0.159496 2.804400 -0.083047
+v 0.161856 2.700000 0.118784
+v 0.161856 2.700000 -0.118784
+v 0.161856 2.700000 -0.118784
+v 0.161856 2.700000 0.118784
+v 0.162745 2.923200 -0.221585
+v 0.162745 2.923200 0.221585
+v 0.165245 2.749050 0.027480
+v 0.165245 2.749050 -0.027480
+v 0.165941 2.659200 -0.226113
+v 0.165941 2.659200 0.226113
+v 0.166221 3.081150 0.318907
+v 0.166221 3.081150 -0.318907
+v 0.166306 3.034800 -0.319082
+v 0.166306 3.034800 0.319082
+v 0.167400 2.749050 -0.000000
+v 0.167400 2.749050 0.000000
+v 0.167751 2.597400 -0.499384
+v 0.167751 2.597400 0.499384
+v 0.170215 2.804400 0.057246
+v 0.170215 2.804400 -0.057246
+v 0.173255 3.141450 -0.090306
+v 0.173255 3.141450 0.090306
+v 0.176897 2.804400 0.029450
+v 0.176897 2.804400 -0.029450
+v 0.177968 2.700000 0.092592
+v 0.177968 2.700000 -0.092592
+v 0.177968 2.700000 -0.092592
+v 0.177968 2.700000 0.092592
+v 0.177989 2.863350 -0.130707
+v 0.177989 2.863350 0.130707
+v 0.179200 2.804400 -0.000000
+v 0.179200 2.804400 0.000000
+v 0.179756 0.002175 -0.345503
+v 0.179756 0.002175 0.345503
+v 0.180521 2.502600 -1.086029
+v 0.180521 2.502600 1.086029
+v 0.181110 2.625600 0.348105
+v 0.181110 2.625600 -0.348105
+v 0.183734 3.117600 -0.250127
+v 0.183734 3.117600 0.250127
+v 0.184870 3.141450 -0.062272
+v 0.184870 3.141450 0.062272
+v 0.187642 0.031200 1.128870
+v 0.187642 0.031200 -1.128870
+v 0.189952 2.700000 0.063808
+v 0.189952 2.700000 -0.063808
+v 0.189952 2.700000 -0.063808
+v 0.189952 2.700000 0.063808
+v 0.192107 3.141450 -0.032048
+v 0.192107 3.141450 0.032048
+v 0.193348 2.981250 -0.263232
+v 0.193348 2.981250 0.263232
+v 0.194472 2.923200 -0.194472
+v 0.194472 2.923200 0.194472
+v 0.194600 3.141450 0.000000
+v 0.194600 3.141450 -0.000000
+v 0.195658 2.863350 -0.101925
+v 0.195658 2.863350 0.101925
+v 0.197424 2.700000 0.032816
+v 0.197424 2.700000 -0.032816
+v 0.197424 2.700000 -0.032816
+v 0.197424 2.700000 0.032816
+v 0.197684 2.474400 -1.189282
+v 0.197684 2.474400 1.189282
+v 0.198374 2.659200 -0.198374
+v 0.198374 2.659200 0.198374
+v 0.200000 2.700000 -0.000000
+v 0.200000 2.700000 0.000000
+v 0.200000 2.700000 0.000000
+v 0.200000 2.700000 -0.000000
+v 0.208794 2.863350 0.070270
+v 0.208794 2.863350 -0.070270
+v 0.209136 2.440800 -1.258183
+v 0.209136 2.440800 1.258183
+v 0.210740 0.046875 -1.267832
+v 0.210740 0.046875 1.267832
+v 0.213123 3.081150 -0.290138
+v 0.213123 3.081150 0.290138
+v 0.213234 3.034800 -0.290295
+v 0.213234 3.034800 0.290295
+v 0.213304 2.400000 -1.283256
+v 0.213304 2.400000 1.283256
+v 0.214905 2.572800 -0.639758
+v 0.214905 2.572800 0.639758
+v 0.216979 2.863350 0.036157
+v 0.216979 2.863350 -0.036157
+v 0.219536 3.117600 -0.219536
+v 0.219536 3.117600 0.219536
+v 0.219800 2.863350 -0.000000
+v 0.219800 2.863350 0.000000
+v 0.221585 2.923200 -0.162745
+v 0.221585 2.923200 0.162745
+v 0.224349 0.008400 0.667871
+v 0.224349 0.008400 -0.667871
+v 0.226113 2.659200 -0.165941
+v 0.226113 2.659200 0.165941
+v 0.226496 2.463000 -1.362620
+v 0.226496 2.463000 1.362620
+v 0.226795 2.482687 1.364422
+v 0.226795 2.482687 -1.364422
+v 0.226824 0.064800 1.364595
+v 0.226824 0.064800 -1.364595
+v 0.227403 2.435437 -1.368074
+v 0.227403 2.435437 1.368074
+v 0.228104 2.494500 -1.372294
+v 0.228104 2.494500 1.372294
+v 0.229712 2.400000 -1.381968
+v 0.229712 2.400000 1.381968
+v 0.230225 2.498438 -1.385053
+v 0.230225 2.498438 1.385053
+v 0.230604 0.002175 -0.314223
+v 0.230604 0.002175 0.314223
+v 0.231031 2.981250 -0.231031
+v 0.231031 2.981250 0.231031
+v 0.232342 2.625600 -0.316590
+v 0.232342 2.625600 0.316590
+v 0.232961 2.494500 -1.401513
+v 0.232961 2.494500 1.401513
+v 0.236115 2.482687 -1.420490
+v 0.236115 2.482687 1.420490
+v 0.237149 0.084525 1.426709
+v 0.237149 0.084525 -1.426709
+v 0.239491 2.463000 -1.440800
+v 0.239491 2.463000 1.440800
+v 0.242892 2.435437 -1.461258
+v 0.242892 2.435437 1.461258
+v 0.242970 0.105600 1.461727
+v 0.242970 0.105600 -1.461727
+v 0.243424 2.597400 0.467878
+v 0.243424 2.597400 -0.467878
+v 0.243569 2.923200 -0.126920
+v 0.243569 2.923200 0.126920
+v 0.245542 0.127575 1.477200
+v 0.245542 0.127575 -1.477200
+v 0.246120 0.150000 -1.480680
+v 0.246120 2.400000 -1.480680
+v 0.246120 0.150000 1.480680
+v 0.246120 0.150000 1.480680
+v 0.246120 2.400000 1.480680
+v 0.246120 0.150000 -1.480680
+v 0.248417 0.177075 -1.494500
+v 0.248417 0.177075 1.494500
+v 0.248621 2.659200 0.129351
+v 0.248621 2.659200 -0.129351
+v 0.250127 3.117600 -0.183734
+v 0.250127 3.117600 0.183734
+v 0.254652 0.213600 -1.532010
+v 0.254652 0.213600 1.532010
+v 0.254653 3.081150 -0.254653
+v 0.254653 3.081150 0.254653
+v 0.254788 3.034800 -0.254788
+v 0.254788 3.034800 0.254788
+v 0.258385 2.242575 -1.554467
+v 0.258385 2.242575 1.554467
+v 0.259910 2.923200 -0.087511
+v 0.259910 2.923200 0.087511
+v 0.263208 2.550000 -0.783552
+v 0.263208 2.550000 0.783552
+v 0.263232 2.981250 -0.193348
+v 0.263232 2.981250 0.193348
+v 0.263841 0.260025 1.587289
+v 0.263841 0.260025 -1.587289
+v 0.265363 2.659200 -0.089140
+v 0.265363 2.659200 0.089140
+v 0.270092 2.923200 -0.045032
+v 0.270092 2.923200 0.045032
+v 0.270404 2.085600 -1.626774
+v 0.270404 2.085600 1.626774
+v 0.273600 2.923200 -0.000000
+v 0.273600 2.923200 0.000000
+v 0.274928 3.117600 -0.143301
+v 0.274928 3.117600 0.143301
+v 0.274998 0.316800 -1.654413
+v 0.274998 0.316800 1.654413
+v 0.275675 0.002175 -0.275675
+v 0.275675 0.002175 0.275675
+v 0.275801 2.659200 -0.045844
+v 0.275801 2.659200 0.045844
+v 0.277752 2.625600 -0.277752
+v 0.277752 2.625600 0.277752
+v 0.279400 2.659200 0.000000
+v 0.281930 1.929525 1.696119
+v 0.281930 1.929525 -1.696119
+v 0.287140 0.384375 -1.727460
+v 0.287140 0.384375 1.727460
+v 0.289340 2.981250 -0.150793
+v 0.289340 2.981250 0.150793
+v 0.290138 3.081150 -0.213123
+v 0.290138 3.081150 0.213123
+v 0.290295 3.034800 -0.213234
+v 0.290295 3.034800 0.213234
+v 0.292719 1.774800 -1.761022
+v 0.292719 1.774800 1.761022
+v 0.293360 3.117600 -0.098814
+v 0.293360 3.117600 0.098814
+v 0.299282 0.463200 -1.800507
+v 0.299282 0.463200 1.800507
+v 0.302522 1.621875 -1.820003
+v 0.302523 1.621875 1.820003
+v 0.303862 0.018225 0.904575
+v 0.303862 0.018225 -0.904575
+v 0.304843 3.117600 -0.050855
+v 0.304843 3.117600 0.050855
+v 0.308744 2.981250 -0.103976
+v 0.308744 2.981250 0.103976
+v 0.308800 3.117600 0.000000
+v 0.308800 3.117600 -0.000000
+v 0.309596 2.527200 -0.921647
+v 0.309596 2.527200 0.921647
+v 0.310439 0.553725 -1.867631
+v 0.310439 0.553725 1.867631
+v 0.311096 1.471200 -1.871580
+v 0.311096 1.471200 1.871580
+v 0.311850 2.572800 -0.599396
+v 0.311850 2.572800 0.599396
+v 0.312283 2.597400 -0.425519
+v 0.312283 2.597400 0.425519
+v 0.314223 0.002175 -0.230604
+v 0.314223 0.002175 0.230604
+v 0.316590 2.625600 -0.232342
+v 0.316590 2.625600 0.232342
+v 0.318192 1.323225 -1.914272
+v 0.318192 1.323225 1.914272
+v 0.318907 3.081150 -0.166221
+v 0.318907 3.081150 0.166221
+v 0.319082 3.034800 -0.166306
+v 0.319082 3.034800 0.166306
+v 0.319628 0.656400 -1.922910
+v 0.319628 0.656400 1.922910
+v 0.320834 2.981250 -0.053508
+v 0.320834 2.981250 0.053508
+v 0.323566 1.178400 -1.946601
+v 0.323566 1.178400 1.946601
+v 0.325000 2.981250 0.000000
+v 0.325000 2.981250 -0.000000
+v 0.325553 0.008400 -0.625735
+v 0.325553 0.008400 0.625735
+v 0.325863 0.771675 -1.960420
+v 0.325863 0.771675 1.960420
+v 0.326970 1.037175 -1.967083
+v 0.326970 1.037175 1.967083
+v 0.328160 0.900000 -1.974240
+v 0.328160 0.900000 -1.974240
+v 0.328160 0.900000 1.974240
+v 0.340289 3.081150 -0.114619
+v 0.340289 3.081150 0.114619
+v 0.340477 3.034800 -0.114676
+v 0.340477 3.034800 0.114676
+v 0.345503 0.002175 -0.179756
+v 0.345503 0.002175 0.179756
+v 0.348105 2.625600 -0.181110
+v 0.348105 2.625600 0.181110
+v 0.351008 2.502600 -1.044926
+v 0.351008 2.502600 1.044926
+v 0.353610 3.081150 -0.058988
+v 0.353610 3.081150 0.058988
+v 0.353807 3.034800 -0.059016
+v 0.353807 3.034800 0.059016
+v 0.358200 3.081150 -0.000000
+v 0.358200 3.081150 0.000000
+v 0.358400 3.034800 0.000000
+v 0.358400 3.034800 0.000000
+v 0.364854 0.031200 1.086146
+v 0.364854 0.031200 -1.086146
+v 0.368768 0.002175 -0.123875
+v 0.368768 0.002175 0.123875
+v 0.371546 2.625600 -0.124808
+v 0.371546 2.625600 0.124808
+v 0.373318 2.597400 -0.373318
+v 0.373318 2.597400 0.373318
+v 0.381942 2.550000 -0.734118
+v 0.381942 2.550000 0.734118
+v 0.383274 0.002175 -0.063708
+v 0.383274 0.002175 0.063708
+v 0.384379 2.474400 -1.144271
+v 0.384379 2.474400 1.144271
+v 0.386161 2.625600 -0.064188
+v 0.386161 2.625600 0.064188
+v 0.388275 0.002175 0.000000
+v 0.388275 0.002175 0.000000
+v 0.391200 2.625600 0.000000
+v 0.391200 2.625600 0.000000
+v 0.400065 2.572800 -0.545131
+v 0.400065 2.572800 0.545131
+v 0.406648 2.440800 -1.210564
+v 0.406648 2.440800 1.210564
+v 0.409767 0.046875 1.219848
+v 0.409767 0.046875 -1.219848
+v 0.414752 2.400000 -1.234688
+v 0.414752 2.400000 1.234688
+v 0.417645 0.008400 -0.569086
+v 0.417645 0.008400 0.569086
+v 0.425519 2.597400 0.312283
+v 0.425519 2.597400 -0.312283
+v 0.440403 2.463000 -1.311049
+v 0.440403 2.463000 1.311049
+v 0.440935 0.018225 0.847506
+v 0.440935 0.018225 -0.847506
+v 0.440985 2.482687 -1.312782
+v 0.440985 2.482687 1.312782
+v 0.441041 0.064800 1.312948
+v 0.441041 0.064800 -1.312948
+v 0.442166 2.435437 -1.316296
+v 0.442166 2.435437 1.316296
+v 0.443529 2.494500 -1.320356
+v 0.443529 2.494500 1.320356
+v 0.446656 2.400000 -1.329664
+v 0.446656 2.400000 1.329664
+v 0.447653 2.498438 -1.332632
+v 0.447653 2.498438 1.332632
+v 0.449256 2.527200 -0.863501
+v 0.449256 2.527200 0.863501
+v 0.452973 2.494500 -1.348469
+v 0.452973 2.494500 1.348469
+v 0.459107 2.482687 -1.366728
+v 0.459107 2.482687 1.366728
+v 0.461116 0.084525 1.372712
+v 0.461116 0.084525 -1.372712
+v 0.465671 2.463000 -1.386270
+v 0.465671 2.463000 1.386270
+v 0.467878 2.597400 -0.243424
+v 0.467878 2.597400 0.243424
+v 0.472283 2.435437 -1.405953
+v 0.472283 2.435437 1.405953
+v 0.472434 0.105600 1.406405
+v 0.472434 0.105600 -1.406405
+v 0.477435 0.127575 1.421292
+v 0.477435 0.127575 -1.421292
+v 0.478256 2.572800 -0.478256
+v 0.478256 2.572800 0.478256
+v 0.478560 0.150000 -1.424640
+v 0.478560 2.400000 -1.424640
+v 0.478560 0.150000 1.424640
+v 0.478560 0.150000 1.424640
+v 0.478560 0.150000 -1.424640
+v 0.478560 2.400000 1.424640
+v 0.483027 0.177075 -1.437937
+v 0.483027 0.177075 1.437937
+v 0.489984 2.550000 -0.667656
+v 0.489984 2.550000 0.667656
+v 0.495150 0.213600 -1.474028
+v 0.495150 0.213600 1.474028
+v 0.499272 0.008400 -0.499272
+v 0.499272 0.008400 0.499272
+v 0.499384 2.597400 -0.167751
+v 0.499384 2.597400 0.167751
+v 0.502408 2.242575 -1.495635
+v 0.502408 2.242575 1.495635
+v 0.509349 2.502600 0.979002
+v 0.509349 2.502600 -0.979002
+v 0.513016 0.260025 -1.527214
+v 0.513016 0.260025 1.527214
+v 0.519028 2.597400 0.086273
+v 0.519028 2.597400 -0.086273
+v 0.525778 2.085600 -1.565204
+v 0.525778 2.085600 1.565204
+v 0.525800 2.597400 -0.000000
+v 0.525800 2.597400 0.000000
+v 0.529441 0.031200 -1.017621
+v 0.529441 0.031200 1.017621
+v 0.534711 0.316800 -1.591798
+v 0.534711 0.316800 1.591798
+v 0.545131 2.572800 -0.400065
+v 0.545131 2.572800 0.400065
+v 0.548190 1.929525 -1.631925
+v 0.548190 1.929525 1.631925
+v 0.557774 2.474400 -1.072079
+v 0.557774 2.474400 1.072079
+v 0.558320 0.384375 -1.662080
+v 0.558320 0.384375 1.662080
+v 0.565664 0.018225 0.770779
+v 0.565664 0.018225 -0.770779
+v 0.569086 0.008400 -0.417645
+v 0.569086 0.008400 0.417645
+v 0.569167 1.774800 -1.694372
+v 0.569167 1.774800 1.694372
+v 0.576340 2.527200 -0.785325
+v 0.576340 2.527200 0.785325
+v 0.581929 0.463200 -1.732362
+v 0.581929 0.463200 1.732362
+v 0.585750 2.550000 -0.585750
+v 0.585750 2.550000 0.585750
+v 0.588230 1.621875 -1.751120
+v 0.588230 1.621875 1.751120
+v 0.590089 2.440800 1.134190
+v 0.590089 2.440800 -1.134190
+v 0.594614 0.046875 -1.142888
+v 0.594614 0.046875 1.142888
+v 0.599396 2.572800 -0.311850
+v 0.599396 2.572800 0.311850
+v 0.601848 2.400000 -1.156792
+v 0.601848 2.400000 1.156792
+v 0.603624 0.553725 -1.796946
+v 0.603624 0.553725 1.796946
+v 0.604900 1.471200 -1.800745
+v 0.604900 1.471200 1.800745
+v 0.618698 1.323225 -1.841822
+v 0.618698 1.323225 1.841822
+v 0.621490 0.656400 -1.850132
+v 0.621490 0.656400 1.850132
+v 0.625735 0.008400 0.325553
+v 0.625735 0.008400 -0.325553
+v 0.629147 1.178400 -1.872927
+v 0.629147 1.178400 1.872927
+v 0.633613 0.771675 -1.886223
+v 0.633613 0.771675 1.886223
+v 0.635767 1.037175 -1.892634
+v 0.635767 1.037175 1.892634
+v 0.638080 0.900000 -1.899520
+v 0.638080 0.900000 -1.899520
+v 0.638080 0.900000 1.899520
+v 0.638080 0.900000 1.899520
+v 0.639070 2.463000 -1.228335
+v 0.639070 2.463000 1.228335
+v 0.639758 2.572800 -0.214905
+v 0.639758 2.572800 0.214905
+v 0.639915 2.482687 1.229959
+v 0.639915 2.482687 -1.229959
+v 0.639996 0.064800 -1.230115
+v 0.639996 0.064800 1.230115
+v 0.641628 2.435437 -1.233252
+v 0.641628 2.435437 1.233252
+v 0.643607 2.494500 -1.237056
+v 0.643607 2.494500 1.237056
+v 0.648144 2.400000 -1.245776
+v 0.648144 2.400000 1.245776
+v 0.649591 2.498438 -1.248557
+v 0.649591 2.498438 1.248557
+v 0.653431 2.502600 -0.890370
+v 0.653431 2.502600 0.890370
+v 0.657311 2.494500 -1.263395
+v 0.657311 2.494500 1.263395
+v 0.664924 2.572800 -0.110524
+v 0.664924 2.572800 0.110524
+v 0.666211 2.482687 1.280502
+v 0.666211 2.482687 -1.280502
+v 0.667656 2.550000 -0.489984
+v 0.667656 2.550000 0.489984
+v 0.667871 0.008400 -0.224349
+v 0.667871 0.008400 0.224349
+v 0.669128 0.084525 -1.286108
+v 0.669128 0.084525 1.286108
+v 0.673600 2.572800 0.000000
+v 0.673600 2.572800 -0.000000
+v 0.675736 2.463000 -1.298810
+v 0.675736 2.463000 1.298810
+v 0.676222 0.018225 0.676222
+v 0.676222 0.018225 -0.676222
+v 0.679207 0.031200 -0.925493
+v 0.679207 0.031200 0.925493
+v 0.685331 2.435437 -1.317252
+v 0.685331 2.435437 1.317252
+v 0.685551 0.105600 -1.317675
+v 0.685551 0.105600 1.317675
+v 0.688984 2.527200 -0.688984
+v 0.688984 2.527200 0.688984
+v 0.692808 0.127575 1.331623
+v 0.692808 0.127575 -1.331623
+v 0.694143 0.008400 -0.115381
+v 0.694143 0.008400 0.115381
+v 0.694440 0.150000 1.334760
+v 0.694440 0.150000 -1.334760
+v 0.694440 2.400000 1.334760
+v 0.694440 0.150000 -1.334760
+v 0.694440 0.150000 1.334760
+v 0.694440 2.400000 -1.334760
+v 0.700921 0.177075 1.347218
+v 0.700921 0.177075 -1.347218
+v 0.703200 0.008400 0.000000
+v 0.715555 2.474400 -0.975021
+v 0.715555 2.474400 0.975021
+v 0.718514 0.213600 1.381032
+v 0.718514 0.213600 -1.381032
+v 0.729046 2.242575 -1.401276
+v 0.729046 2.242575 1.401276
+v 0.734118 2.550000 -0.381942
+v 0.734118 2.550000 0.381942
+v 0.744440 0.260025 1.430863
+v 0.744440 0.260025 -1.430863
+v 0.757010 2.440800 1.031508
+v 0.757010 2.440800 -1.031508
+v 0.762816 0.046875 -1.039419
+v 0.762816 0.046875 1.039419
+v 0.762958 2.085600 -1.466456
+v 0.762958 2.085600 1.466456
+v 0.770779 0.018225 0.565664
+v 0.770779 0.018225 -0.565664
+v 0.772096 2.400000 -1.052064
+v 0.772096 2.400000 1.052064
+v 0.775921 0.316800 -1.491372
+v 0.775921 0.316800 1.491372
+v 0.781142 2.502600 -0.781142
+v 0.781142 2.502600 0.781142
+v 0.783552 2.550000 -0.263208
+v 0.783552 2.550000 0.263208
+v 0.785325 2.527200 -0.576340
+v 0.785325 2.527200 0.576340
+v 0.795481 1.929525 1.528968
+v 0.795481 1.929525 -1.528968
+v 0.810180 0.384375 1.557220
+v 0.810180 0.384375 -1.557220
+v 0.811956 0.031200 0.811956
+v 0.811956 0.031200 -0.811956
+v 0.814374 2.550000 -0.135366
+v 0.814374 2.550000 0.135366
+v 0.819847 2.463000 -1.117130
+v 0.819847 2.463000 1.117130
+v 0.820931 2.482687 1.118607
+v 0.820931 2.482687 -1.118607
+v 0.821035 0.064800 1.118749
+v 0.821035 0.064800 -1.118749
+v 0.823129 2.435437 -1.121601
+v 0.823129 2.435437 1.121601
+v 0.825000 2.550000 0.000000
+v 0.825000 2.550000 0.000000
+v 0.825668 2.494500 -1.125061
+v 0.825668 2.494500 1.125061
+v 0.825921 1.774800 1.587475
+v 0.825921 1.774800 -1.587475
+v 0.831488 2.400000 -1.132992
+v 0.831488 2.400000 1.132992
+v 0.833344 2.498438 -1.135521
+v 0.833344 2.498438 1.135521
+v 0.843248 2.494500 -1.149016
+v 0.843248 2.494500 1.149016
+v 0.844439 0.463200 1.623068
+v 0.844439 0.463200 -1.623068
+v 0.847506 0.018225 -0.440935
+v 0.847506 0.018225 0.440935
+v 0.853583 1.621875 -1.640643
+v 0.853583 1.621875 1.640643
+v 0.854666 2.482687 -1.164574
+v 0.854666 2.482687 1.164574
+v 0.855408 2.474400 -0.855408
+v 0.855408 2.474400 0.855408
+v 0.858407 0.084525 -1.169673
+v 0.858407 0.084525 1.169673
+v 0.863501 2.527200 -0.449256
+v 0.863501 2.527200 0.449256
+v 0.866886 2.463000 -1.181225
+v 0.866886 2.463000 1.181225
+v 0.875920 0.553725 -1.683577
+v 0.875920 0.553725 1.683577
+v 0.877772 1.471200 -1.687137
+v 0.877772 1.471200 1.687137
+v 0.879195 2.435437 -1.197997
+v 0.879195 2.435437 1.197997
+v 0.879477 0.105600 -1.198382
+v 0.879477 0.105600 1.198382
+v 0.888786 0.127575 1.211067
+v 0.888786 0.127575 -1.211067
+v 0.890370 2.502600 -0.653431
+v 0.890370 2.502600 0.653431
+v 0.890880 0.150000 -1.213920
+v 0.890880 0.150000 1.213920
+v 0.890880 2.400000 -1.213920
+v 0.890880 0.150000 -1.213920
+v 0.890880 0.150000 1.213920
+v 0.890880 2.400000 1.213920
+v 0.897795 1.323225 -1.725622
+v 0.897795 1.323225 1.725622
+v 0.899195 0.177075 1.225250
+v 0.899195 0.177075 -1.225250
+v 0.901846 0.656400 -1.733408
+v 0.901846 0.656400 1.733408
+v 0.904575 0.018225 0.303862
+v 0.904575 0.018225 -0.303862
+v 0.904966 2.440800 0.904966
+v 0.904966 2.440800 -0.904966
+v 0.911906 0.046875 -0.911906
+v 0.911906 0.046875 0.911906
+v 0.912957 1.178400 -1.754764
+v 0.912957 1.178400 1.754764
+v 0.919439 0.771675 -1.767222
+v 0.919439 0.771675 1.767222
+v 0.921647 2.527200 -0.309596
+v 0.921647 2.527200 0.309596
+v 0.921764 0.213600 1.256003
+v 0.921764 0.213600 -1.256003
+v 0.922564 1.037175 1.773229
+v 0.922564 1.037175 -1.773229
+v 0.923000 2.400000 -0.923000
+v 0.923000 2.400000 0.923000
+v 0.925493 0.031200 0.679207
+v 0.925493 0.031200 -0.679207
+v 0.925920 0.900000 1.779680
+v 0.925920 0.900000 -1.779680
+v 0.925920 0.900000 -1.779680
+v 0.925920 0.900000 1.779680
+v 0.935276 2.242575 -1.274414
+v 0.935276 2.242575 1.274414
+v 0.940158 0.018225 0.156274
+v 0.940158 0.018225 -0.156274
+v 0.952425 0.018225 0.000000
+v 0.952425 0.018225 0.000000
+v 0.955023 0.260025 1.301322
+v 0.955023 0.260025 -1.301322
+v 0.957901 2.527200 -0.159223
+v 0.957901 2.527200 0.159223
+v 0.970400 2.527200 0.000000
+v 0.970400 2.527200 -0.000000
+v 0.975021 2.474400 -0.715555
+v 0.975021 2.474400 0.715555
+v 0.978780 2.085600 -1.333693
+v 0.978780 2.085600 1.333693
+v 0.979002 2.502600 0.509349
+v 0.979002 2.502600 -0.509349
+v 0.980084 2.463000 -0.980084
+v 0.980084 2.463000 0.980084
+v 0.981380 2.482687 -0.981380
+v 0.981380 2.482687 0.981380
+v 0.981504 0.064800 0.981504
+v 0.981504 0.064800 -0.981504
+v 0.984007 2.435437 -0.984007
+v 0.984007 2.435437 0.984007
+v 0.987042 2.494500 -0.987042
+v 0.987042 2.494500 0.987042
+v 0.994000 2.400000 -0.994000
+v 0.994000 2.400000 0.994000
+v 0.995410 0.316800 -1.356353
+v 0.995410 0.316800 1.356353
+v 0.996219 2.498438 -0.996219
+v 0.996219 2.498438 0.996219
+v 1.008058 2.494500 -1.008058
+v 1.008058 2.494500 1.008058
+v 1.017621 0.031200 0.529441
+v 1.017621 0.031200 -0.529441
+v 1.020503 1.929525 -1.390545
+v 1.020503 1.929525 1.390545
+v 1.021708 2.482687 -1.021708
+v 1.021708 2.482687 1.021708
+v 1.026181 0.084525 -1.026181
+v 1.026181 0.084525 1.026181
+v 1.031508 2.440800 0.757010
+v 1.031508 2.440800 -0.757010
+v 1.036316 2.463000 -1.036316
+v 1.036316 2.463000 1.036316
+v 1.039360 0.384375 -1.416240
+v 1.039360 0.384375 1.416240
+v 1.039419 0.046875 -0.762816
+v 1.039419 0.046875 0.762816
+v 1.044926 2.502600 -0.351008
+v 1.044926 2.502600 0.351008
+v 1.051031 2.435437 -1.051031
+v 1.051031 2.435437 1.051031
+v 1.051368 0.105600 -1.051368
+v 1.051368 0.105600 1.051368
+v 1.052064 2.400000 -0.772096
+v 1.052064 2.400000 0.772096
+v 1.059553 1.774800 -1.443756
+v 1.059553 1.774800 1.443756
+v 1.062497 0.127575 1.062497
+v 1.062497 0.127575 -1.062497
+v 1.065000 0.150000 -1.065000
+v 1.065000 0.150000 1.065000
+v 1.065000 2.400000 -1.065000
+v 1.065000 2.400000 1.065000
+v 1.072079 2.474400 -0.557774
+v 1.072079 2.474400 0.557774
+v 1.074940 0.177075 -1.074940
+v 1.074940 0.177075 1.074940
+v 1.083310 0.463200 -1.476127
+v 1.083310 0.463200 1.476127
+v 1.086029 2.502600 0.180521
+v 1.086029 2.502600 -0.180521
+v 1.086146 0.031200 0.364854
+v 1.086146 0.031200 -0.364854
+v 1.095040 1.621875 -1.492110
+v 1.095040 1.621875 1.492110
+v 1.100200 2.502600 -0.000000
+v 1.100200 2.502600 0.000000
+v 1.101920 0.213600 1.101920
+v 1.101920 0.213600 -1.101920
+v 1.117130 2.463000 -0.819847
+v 1.117130 2.463000 0.819847
+v 1.118073 2.242575 -1.118073
+v 1.118073 2.242575 1.118073
+v 1.118607 2.482687 -0.820931
+v 1.118607 2.482687 0.820931
+v 1.118749 0.064800 -0.821035
+v 1.118749 0.064800 0.821035
+v 1.121601 2.435437 -0.823129
+v 1.121601 2.435437 0.823129
+v 1.123697 0.553725 -1.531158
+v 1.123697 0.553725 1.531158
+v 1.125061 2.494500 -0.825668
+v 1.125061 2.494500 0.825668
+v 1.126072 1.471200 -1.534395
+v 1.126072 1.471200 1.534395
+v 1.128870 0.031200 -0.187642
+v 1.128870 0.031200 0.187642
+v 1.132992 2.400000 -0.831488
+v 1.132992 2.400000 0.831488
+v 1.134190 2.440800 0.590089
+v 1.134190 2.440800 -0.590089
+v 1.135521 2.498438 -0.833344
+v 1.135521 2.498438 0.833344
+v 1.141680 0.260025 1.141680
+v 1.141680 0.260025 -1.141680
+v 1.142888 0.046875 -0.594614
+v 1.142888 0.046875 0.594614
+v 1.143600 0.031200 0.000000
+v 1.143600 0.031200 0.000000
+v 1.144271 2.474400 -0.384379
+v 1.144271 2.474400 0.384379
+v 1.149016 2.494500 -0.843248
+v 1.149016 2.494500 0.843248
+v 1.151759 1.323225 -1.569396
+v 1.151759 1.323225 1.569396
+v 1.156792 2.400000 -0.601848
+v 1.156792 2.400000 0.601848
+v 1.156956 0.656400 -1.576477
+v 1.156956 0.656400 1.576477
+v 1.164574 2.482687 -0.854666
+v 1.164574 2.482687 0.854666
+v 1.169673 0.084525 -0.858407
+v 1.169673 0.084525 0.858407
+v 1.170080 2.085600 -1.170080
+v 1.170080 2.085600 1.170080
+v 1.171210 1.178400 -1.595900
+v 1.171210 1.178400 1.595900
+v 1.179525 0.771675 -1.607230
+v 1.179525 0.771675 1.607230
+v 1.181225 2.463000 -0.866886
+v 1.181225 2.463000 0.866886
+v 1.183534 1.037175 -1.612693
+v 1.183534 1.037175 1.612693
+v 1.187840 0.900000 -1.618560
+v 1.187840 0.900000 -1.618560
+v 1.187840 0.900000 1.618560
+v 1.187840 0.900000 1.618560
+v 1.189282 2.474400 -0.197684
+v 1.189282 2.474400 0.197684
+v 1.189960 0.316800 -1.189960
+v 1.189960 0.316800 1.189960
+v 1.197997 2.435437 -0.879195
+v 1.197997 2.435437 0.879195
+v 1.198382 0.105600 -0.879477
+v 1.198382 0.105600 0.879477
+v 1.204800 2.474400 0.000000
+v 1.204800 2.474400 -0.000000
+v 1.210564 2.440800 0.406648
+v 1.210564 2.440800 -0.406648
+v 1.211067 0.127575 0.888786
+v 1.211067 0.127575 -0.888786
+v 1.213920 0.150000 -0.890880
+v 1.213920 0.150000 -0.890880
+v 1.213920 0.150000 0.890880
+v 1.213920 0.150000 0.890880
+v 1.213920 2.400000 -0.890880
+v 1.213920 2.400000 0.890880
+v 1.219848 0.046875 -0.409767
+v 1.219848 0.046875 0.409767
+v 1.219958 1.929525 1.219958
+v 1.219958 1.929525 -1.219958
+v 1.225250 0.177075 0.899195
+v 1.225250 0.177075 -0.899195
+v 1.228335 2.463000 -0.639070
+v 1.228335 2.463000 0.639070
+v 1.229959 2.482687 -0.639915
+v 1.229959 2.482687 0.639915
+v 1.230115 0.064800 -0.639996
+v 1.230115 0.064800 0.639996
+v 1.233252 2.435437 -0.641628
+v 1.233252 2.435437 0.641628
+v 1.234688 2.400000 -0.414752
+v 1.234688 2.400000 0.414752
+v 1.237056 2.494500 -0.643607
+v 1.237056 2.494500 0.643607
+v 1.242500 0.384375 -1.242500
+v 1.242500 0.384375 1.242500
+v 1.245776 2.400000 -0.648144
+v 1.245776 2.400000 0.648144
+v 1.248557 2.498438 -0.649591
+v 1.248557 2.498438 0.649591
+v 1.256003 0.213600 0.921764
+v 1.256003 0.213600 -0.921764
+v 1.258183 2.440800 0.209136
+v 1.258183 2.440800 -0.209136
+v 1.263395 2.494500 -0.657311
+v 1.263395 2.494500 0.657311
+v 1.266640 1.774800 -1.266640
+v 1.266640 1.774800 1.266640
+v 1.267832 0.046875 -0.210740
+v 1.267832 0.046875 0.210740
+v 1.274414 2.242575 -0.935276
+v 1.274414 2.242575 0.935276
+v 1.274600 2.440800 0.000000
+v 1.274600 2.440800 0.000000
+v 1.280502 2.482687 -0.666211
+v 1.280502 2.482687 0.666211
+v 1.283256 2.400000 -0.213304
+v 1.283256 2.400000 0.213304
+v 1.284375 0.046875 0.000000
+v 1.284375 0.046875 -0.000000
+v 1.286108 0.084525 -0.669128
+v 1.286108 0.084525 0.669128
+v 1.295040 0.463200 -1.295040
+v 1.295040 0.463200 1.295040
+v 1.298810 2.463000 -0.675736
+v 1.298810 2.463000 0.675736
+v 1.300000 2.400000 0.000000
+v 1.300000 2.400000 -0.000000
+v 1.301322 0.260025 0.955023
+v 1.301322 0.260025 -0.955023
+v 1.309063 1.621875 -1.309063
+v 1.309063 1.621875 1.309063
+v 1.311049 2.463000 -0.440403
+v 1.311049 2.463000 0.440403
+v 1.312782 2.482687 -0.440985
+v 1.312782 2.482687 0.440985
+v 1.312948 0.064800 0.441041
+v 1.312948 0.064800 -0.441041
+v 1.316296 2.435437 -0.442166
+v 1.316296 2.435437 0.442166
+v 1.317252 2.435437 -0.685331
+v 1.317252 2.435437 0.685331
+v 1.317675 0.105600 -0.685551
+v 1.317675 0.105600 0.685551
+v 1.320356 2.494500 -0.443529
+v 1.320356 2.494500 0.443529
+v 1.329664 2.400000 -0.446656
+v 1.329664 2.400000 0.446656
+v 1.331623 0.127575 0.692808
+v 1.331623 0.127575 -0.692808
+v 1.332632 2.498438 -0.447653
+v 1.332632 2.498438 0.447653
+v 1.333693 2.085600 -0.978780
+v 1.333693 2.085600 0.978780
+v 1.334760 0.150000 0.694440
+v 1.334760 0.150000 -0.694440
+v 1.334760 0.150000 -0.694440
+v 1.334760 0.150000 0.694440
+v 1.334760 2.400000 -0.694440
+v 1.334760 2.400000 0.694440
+v 1.343320 0.553725 -1.343320
+v 1.343320 0.553725 1.343320
+v 1.346160 1.471200 -1.346160
+v 1.346160 1.471200 1.346160
+v 1.347218 0.177075 0.700921
+v 1.347218 0.177075 -0.700921
+v 1.348469 2.494500 -0.452973
+v 1.348469 2.494500 0.452973
+v 1.356353 0.316800 -0.995410
+v 1.356353 0.316800 0.995410
+v 1.362620 2.463000 -0.226496
+v 1.362620 2.463000 0.226496
+v 1.364422 2.482687 -0.226795
+v 1.364422 2.482687 0.226795
+v 1.364595 0.064800 -0.226824
+v 1.364595 0.064800 0.226824
+v 1.366728 2.482687 -0.459107
+v 1.366728 2.482687 0.459107
+v 1.368074 2.435437 -0.227403
+v 1.368074 2.435437 0.227403
+v 1.372294 2.494500 -0.228104
+v 1.372294 2.494500 0.228104
+v 1.372712 0.084525 -0.461116
+v 1.372712 0.084525 0.461116
+v 1.376867 1.323225 -1.376868
+v 1.376868 1.323225 1.376867
+v 1.380400 2.463000 0.000000
+v 1.380400 2.463000 -0.000000
+v 1.381032 0.213600 0.718514
+v 1.381032 0.213600 -0.718514
+v 1.381968 2.400000 -0.229712
+v 1.381968 2.400000 0.229712
+v 1.382225 2.482687 0.000000
+v 1.382225 2.482687 0.000000
+v 1.382400 0.064800 0.000000
+v 1.382400 0.064800 0.000000
+v 1.383080 0.656400 -1.383080
+v 1.383080 0.656400 1.383080
+v 1.385053 2.498438 -0.230225
+v 1.385053 2.498438 0.230225
+v 1.385925 2.435437 0.000000
+v 1.385925 2.435437 -0.000000
+v 1.386270 2.463000 -0.465671
+v 1.386270 2.463000 0.465671
+v 1.390200 2.494500 0.000000
+v 1.390200 2.494500 -0.000000
+v 1.390545 1.929525 -1.020503
+v 1.390545 1.929525 1.020503
+v 1.400000 2.400000 0.000000
+v 1.400000 2.400000 0.000000
+v 1.400120 1.178400 -1.400120
+v 1.400120 1.178400 1.400120
+v 1.401276 2.242575 -0.729046
+v 1.401276 2.242575 0.729046
+v 1.401513 2.494500 -0.232961
+v 1.401513 2.494500 0.232961
+v 1.403125 2.498438 0.000000
+v 1.403125 2.498438 0.000000
+v 1.405953 2.435437 -0.472283
+v 1.405953 2.435437 0.472283
+v 1.406405 0.105600 -0.472434
+v 1.406405 0.105600 0.472434
+v 1.410060 0.771675 -1.410060
+v 1.410060 0.771675 1.410060
+v 1.414853 1.037175 -1.414853
+v 1.414853 1.037175 1.414853
+v 1.416240 0.384375 -1.039360
+v 1.416240 0.384375 1.039360
+v 1.419800 2.494500 0.000000
+v 1.419800 2.494500 -0.000000
+v 1.420000 0.900000 -1.420000
+v 1.420000 0.900000 -1.420000
+v 1.420000 0.900000 1.420000
+v 1.420000 0.900000 1.420000
+v 1.420490 2.482687 -0.236115
+v 1.420490 2.482687 0.236115
+v 1.421292 0.127575 0.477435
+v 1.421292 0.127575 -0.477435
+v 1.424640 0.150000 -0.478560
+v 1.424640 0.150000 -0.478560
+v 1.424640 0.150000 0.478560
+v 1.424640 0.150000 0.478560
+v 1.424640 2.400000 -0.478560
+v 1.424640 2.400000 0.478560
+v 1.426709 0.084525 -0.237149
+v 1.426709 0.084525 0.237149
+v 1.430863 0.260025 0.744440
+v 1.430863 0.260025 -0.744440
+v 1.437937 0.177075 0.483027
+v 1.437937 0.177075 -0.483027
+v 1.439025 2.482687 0.000000
+v 1.440800 2.463000 -0.239491
+v 1.440800 2.463000 0.239491
+v 1.443756 1.774800 -1.059553
+v 1.443756 1.774800 1.059553
+v 1.445325 0.084525 0.000000
+v 1.445325 0.084525 0.000000
+v 1.459600 2.463000 0.000000
+v 1.459600 2.463000 -0.000000
+v 1.461258 2.435437 -0.242892
+v 1.461258 2.435437 0.242892
+v 1.461727 0.105600 -0.242970
+v 1.461727 0.105600 0.242970
+v 1.466456 2.085600 -0.762958
+v 1.466456 2.085600 0.762958
+v 1.474028 0.213600 0.495150
+v 1.474028 0.213600 -0.495150
+v 1.476127 0.463200 -1.083310
+v 1.476127 0.463200 1.083310
+v 1.477200 0.127575 0.245542
+v 1.477200 0.127575 -0.245542
+v 1.480325 2.435437 0.000000
+v 1.480325 2.435437 -0.000000
+v 1.480680 0.150000 -0.246120
+v 1.480680 0.150000 0.246120
+v 1.480680 0.150000 0.246120
+v 1.480680 0.150000 -0.246120
+v 1.480680 2.400000 -0.246120
+v 1.480680 2.400000 0.246120
+v 1.480800 0.105600 0.000000
+v 1.480800 0.105600 0.000000
+v 1.491372 0.316800 -0.775921
+v 1.491372 0.316800 0.775921
+v 1.492110 1.621875 -1.095040
+v 1.492110 1.621875 1.095040
+v 1.494500 0.177075 0.248417
+v 1.494500 0.177075 -0.248417
+v 1.495635 2.242575 -0.502408
+v 1.495635 2.242575 0.502408
+v 1.496475 0.127575 0.000000
+v 1.496475 0.127575 0.000000
+v 1.500000 0.150000 0.000000
+v 1.500000 0.150000 0.000000
+v 1.500000 2.400000 0.000000
+v 1.500000 2.400000 0.000000
+v 1.514000 0.177075 -0.000000
+v 1.514000 0.177075 0.000000
+v 1.527214 0.260025 -0.513016
+v 1.527214 0.260025 0.513016
+v 1.528968 1.929525 -0.795481
+v 1.528968 1.929525 0.795481
+v 1.531158 0.553725 -1.123697
+v 1.531158 0.553725 1.123697
+v 1.532010 0.213600 0.254652
+v 1.532010 0.213600 -0.254652
+v 1.534395 1.471200 -1.126072
+v 1.534395 1.471200 1.126072
+v 1.552000 0.213600 0.000000
+v 1.552000 0.213600 0.000000
+v 1.554467 2.242575 -0.258385
+v 1.554467 2.242575 0.258385
+v 1.557220 0.384375 -0.810180
+v 1.557220 0.384375 0.810180
+v 1.565204 2.085600 -0.525778
+v 1.565204 2.085600 0.525778
+v 1.569396 1.323225 -1.151759
+v 1.569396 1.323225 1.151759
+v 1.574750 2.242575 0.000000
+v 1.574750 2.242575 0.000000
+v 1.576477 0.656400 -1.156956
+v 1.576477 0.656400 1.156956
+v 1.587289 0.260025 0.263841
+v 1.587289 0.260025 -0.263841
+v 1.587475 1.774800 -0.825921
+v 1.587475 1.774800 0.825921
+v 1.591798 0.316800 -0.534711
+v 1.591798 0.316800 0.534711
+v 1.595900 1.178400 -1.171210
+v 1.595900 1.178400 1.171210
+v 1.607230 0.771675 -1.179525
+v 1.607230 0.771675 1.179525
+v 1.608000 0.260025 0.000000
+v 1.608000 0.260025 0.000000
+v 1.612693 1.037175 -1.183534
+v 1.612693 1.037175 1.183534
+v 1.618560 0.900000 -1.187840
+v 1.618560 0.900000 -1.187840
+v 1.618560 0.900000 1.187840
+v 1.618560 0.900000 1.187840
+v 1.623068 0.463200 -0.844439
+v 1.623068 0.463200 0.844439
+v 1.626774 2.085600 -0.270404
+v 1.626774 2.085600 0.270404
+v 1.631925 1.929525 -0.548190
+v 1.631925 1.929525 0.548190
+v 1.640643 1.621875 -0.853583
+v 1.640643 1.621875 0.853583
+v 1.648000 2.085600 0.000000
+v 1.648000 2.085600 -0.000000
+v 1.654413 0.316800 -0.274998
+v 1.654413 0.316800 0.274998
+v 1.662080 0.384375 -0.558320
+v 1.662080 0.384375 0.558320
+v 1.676000 0.316800 0.000000
+v 1.676000 0.316800 0.000000
+v 1.683577 0.553725 -0.875920
+v 1.683577 0.553725 0.875920
+v 1.687137 1.471200 -0.877772
+v 1.687137 1.471200 0.877772
+v 1.694372 1.774800 -0.569167
+v 1.694372 1.774800 0.569167
+v 1.696119 1.929525 -0.281930
+v 1.696119 1.929525 0.281930
+v 1.700000 0.600000 0.000000
+v 1.700000 0.600000 0.000000
+v 1.700000 0.623100 0.178200
+v 1.700000 0.623100 -0.178200
+v 1.700000 0.685800 -0.316800
+v 1.700000 0.685800 0.316800
+v 1.700000 0.778200 0.415800
+v 1.700000 0.778200 -0.415800
+v 1.700000 0.890400 -0.475200
+v 1.700000 0.890400 0.475200
+v 1.700000 1.012500 -0.495000
+v 1.700000 1.012500 0.495000
+v 1.700000 1.134600 -0.475200
+v 1.700000 1.134600 0.475200
+v 1.700000 1.246800 0.415800
+v 1.700000 1.246800 -0.415800
+v 1.700000 1.339200 -0.316800
+v 1.700000 1.339200 0.316800
+v 1.700000 1.401900 0.178200
+v 1.700000 1.401900 -0.178200
+v 1.700000 1.425000 0.000000
+v 1.700000 1.425000 0.000000
+v 1.718250 1.929525 0.000000
+v 1.718250 1.929525 0.000000
+v 1.725622 1.323225 -0.897795
+v 1.725622 1.323225 0.897795
+v 1.727460 0.384375 -0.287140
+v 1.727460 0.384375 0.287140
+v 1.732362 0.463200 -0.581929
+v 1.732362 0.463200 0.581929
+v 1.733408 0.656400 -0.901846
+v 1.733408 0.656400 0.901846
+v 1.750000 0.384375 0.000000
+v 1.750000 0.384375 0.000000
+v 1.751120 1.621875 -0.588230
+v 1.751120 1.621875 0.588230
+v 1.754764 1.178400 -0.912957
+v 1.754764 1.178400 0.912957
+v 1.761022 1.774800 -0.292719
+v 1.761022 1.774800 0.292719
+v 1.767222 0.771675 -0.919439
+v 1.767222 0.771675 0.919439
+v 1.773229 1.037175 -0.922564
+v 1.773229 1.037175 0.922564
+v 1.779680 0.900000 -0.925920
+v 1.779680 0.900000 -0.925920
+v 1.779680 0.900000 0.925920
+v 1.779680 0.900000 0.925920
+v 1.784000 1.774800 0.000000
+v 1.784000 1.774800 0.000000
+v 1.796946 0.553725 -0.603624
+v 1.796946 0.553725 0.603624
+v 1.800507 0.463200 -0.299282
+v 1.800507 0.463200 0.299282
+v 1.800745 1.471200 -0.604900
+v 1.800745 1.471200 0.604900
+v 1.820003 1.621875 -0.302523
+v 1.820003 1.621875 0.302522
+v 1.824000 0.463200 0.000000
+v 1.824000 0.463200 0.000000
+v 1.841822 1.323225 -0.618698
+v 1.841822 1.323225 0.618698
+v 1.843750 1.621875 0.000000
+v 1.843750 1.621875 -0.000000
+v 1.850132 0.656400 -0.621490
+v 1.850132 0.656400 0.621490
+v 1.867631 0.553725 -0.310439
+v 1.867631 0.553725 0.310439
+v 1.871580 1.471200 -0.311096
+v 1.871580 1.471200 0.311096
+v 1.872927 1.178400 -0.629147
+v 1.872927 1.178400 0.629147
+v 1.886223 0.771675 -0.633613
+v 1.886223 0.771675 0.633613
+v 1.892000 0.553725 0.000000
+v 1.892000 0.553725 -0.000000
+v 1.892634 1.037175 -0.635767
+v 1.892634 1.037175 0.635767
+v 1.896000 1.471200 0.000000
+v 1.896000 1.471200 0.000000
+v 1.899520 0.900000 -0.638080
+v 1.899520 0.900000 -0.638080
+v 1.899520 0.900000 0.638080
+v 1.899520 0.900000 0.638080
+v 1.914272 1.323225 -0.318192
+v 1.914272 1.323225 0.318192
+v 1.922910 0.656400 -0.319628
+v 1.922910 0.656400 0.319628
+v 1.935900 1.444200 0.000000
+v 1.935900 1.444200 0.000000
+v 1.939250 1.323225 0.000000
+v 1.939250 1.323225 -0.000000
+v 1.939394 1.423221 -0.175100
+v 1.939394 1.423221 0.175100
+v 1.946601 1.178400 -0.323566
+v 1.946601 1.178400 0.323566
+v 1.948000 0.656400 0.000000
+v 1.948000 0.656400 -0.000000
+v 1.948879 1.366278 -0.311290
+v 1.948879 1.366278 0.311290
+v 1.960420 0.771675 -0.325863
+v 1.960420 0.771675 0.325863
+v 1.962857 1.282362 -0.408568
+v 1.962857 1.282362 0.408568
+v 1.967083 1.037175 -0.326970
+v 1.967083 1.037175 0.326970
+v 1.972000 1.178400 0.000000
+v 1.972000 1.178400 0.000000
+v 1.974240 0.900000 -0.328160
+v 1.974240 0.900000 0.328160
+v 1.974240 0.900000 0.328160
+v 1.979830 1.180464 -0.466934
+v 1.979830 1.180464 0.466934
+v 1.986000 0.771675 0.000000
+v 1.986000 0.771675 -0.000000
+v 1.992750 1.037175 0.000000
+v 1.992750 1.037175 0.000000
+v 1.998300 1.069575 -0.486390
+v 1.998300 1.069575 0.486390
+v 2.000000 0.900000 0.000000
+v 2.000000 0.900000 0.000000
+v 2.016770 0.958686 -0.466934
+v 2.016770 0.958686 0.466934
+v 2.033743 0.856788 -0.408568
+v 2.033743 0.856788 0.408568
+v 2.047721 0.772872 0.311290
+v 2.047721 0.772872 -0.311290
+v 2.057206 0.715929 0.175100
+v 2.057206 0.715929 -0.175100
+v 2.060700 0.694950 0.000000
+v 2.060700 0.694950 0.000000
+v 2.111200 1.497600 0.000000
+v 2.111200 1.497600 0.000000
+v 2.116979 1.479120 -0.166687
+v 2.116979 1.479120 0.166687
+v 2.132666 1.428960 -0.296333
+v 2.132666 1.428960 0.296333
+v 2.155782 1.355040 -0.388937
+v 2.155782 1.355040 0.388937
+v 2.183853 1.265280 -0.444499
+v 2.183853 1.265280 0.444499
+v 2.214400 1.167600 -0.463020
+v 2.214400 1.167600 0.463020
+v 2.237300 1.578900 0.000000
+v 2.237300 1.578900 0.000000
+v 2.244457 1.563171 -0.154289
+v 2.244457 1.563171 0.154289
+v 2.244947 1.069920 -0.444499
+v 2.244947 1.069920 0.444499
+v 2.263882 1.520478 -0.274291
+v 2.263882 1.520478 0.274291
+v 2.273018 0.980160 -0.388937
+v 2.273018 0.980160 0.388937
+v 2.292510 1.457562 -0.360007
+v 2.292510 1.457562 0.360007
+v 2.296134 0.906240 -0.296333
+v 2.296134 0.906240 0.296333
+v 2.311821 0.856080 -0.166687
+v 2.311821 0.856080 0.166687
+v 2.317600 0.837600 0.000000
+v 2.317600 0.837600 0.000000
+v 2.325600 1.681800 0.000000
+v 2.325600 1.681800 0.000000
+v 2.327271 1.381164 -0.411437
+v 2.327271 1.381164 0.411437
+v 2.333530 1.668948 -0.139234
+v 2.333530 1.668948 0.139234
+v 2.355053 1.634064 -0.247526
+v 2.355053 1.634064 0.247526
+v 2.365100 1.298025 -0.428580
+v 2.365100 1.298025 0.428580
+v 2.386771 1.582656 -0.324878
+v 2.386771 1.582656 0.324878
+v 2.387500 1.800000 0.000000
+v 2.387500 1.800000 0.000000
+v 2.395900 1.790025 0.122850
+v 2.395900 1.790025 -0.122850
+v 2.402929 1.214886 -0.411437
+v 2.402929 1.214886 0.411437
+v 2.418700 1.762950 -0.218400
+v 2.418700 1.762950 0.218400
+v 2.425286 1.520232 -0.371290
+v 2.425286 1.520232 0.371290
+v 2.434400 1.927200 0.000000
+v 2.434400 1.927200 0.000000
+v 2.437690 1.138488 -0.360007
+v 2.437690 1.138488 0.360007
+v 2.443270 1.919976 0.106466
+v 2.443270 1.919976 -0.106466
+v 2.452300 1.723050 -0.286650
+v 2.452300 1.723050 0.286650
+v 2.466318 1.075572 -0.274291
+v 2.466318 1.075572 0.274291
+v 2.467200 1.452300 -0.386760
+v 2.467200 1.452300 0.386760
+v 2.467347 1.900368 0.189274
+v 2.467347 1.900368 -0.189274
+v 2.477700 2.057100 0.000000
+v 2.477700 2.057100 0.000000
+v 2.485743 1.032879 -0.154289
+v 2.485743 1.032879 0.154289
+v 2.487343 2.052375 -0.091411
+v 2.487343 2.052375 0.091411
+v 2.492900 1.017150 0.000000
+v 2.492900 1.017150 0.000000
+v 2.493100 1.674600 -0.327600
+v 2.493100 1.674600 0.327600
+v 2.502829 1.871472 0.248422
+v 2.502829 1.871472 -0.248422
+v 2.509114 1.384368 -0.371290
+v 2.509114 1.384368 0.371290
+v 2.513518 2.039550 0.162509
+v 2.513518 2.039550 -0.162509
+v 2.528800 2.183400 0.000000
+v 2.537500 1.621875 -0.341250
+v 2.537500 1.621875 0.341250
+v 2.539821 2.180796 -0.079013
+v 2.539821 2.180796 0.079013
+v 2.545914 1.836384 -0.283910
+v 2.545914 1.836384 0.283910
+v 2.547629 1.321944 -0.324878
+v 2.547629 1.321944 0.324878
+v 2.552090 2.020650 -0.213293
+v 2.552090 2.020650 0.213293
+v 2.569734 2.173728 -0.140467
+v 2.569734 2.173728 0.140467
+v 2.579347 1.270536 -0.247526
+v 2.579347 1.270536 0.247526
+v 2.581900 1.569150 -0.327600
+v 2.581900 1.569150 0.327600
+v 2.592800 1.798200 -0.295740
+v 2.592800 1.798200 0.295740
+v 2.598929 1.997700 -0.243763
+v 2.598929 1.997700 0.243763
+v 2.599100 2.299800 0.000000
+v 2.599100 2.299800 0.000000
+v 2.600870 1.235652 -0.139234
+v 2.600870 1.235652 0.139234
+v 2.608800 1.222800 0.000000
+v 2.608800 1.222800 0.000000
+v 2.612406 2.298813 0.070600
+v 2.612406 2.298813 -0.070600
+v 2.613818 2.163312 -0.184363
+v 2.613818 2.163312 0.184363
+v 2.622700 1.520700 -0.286650
+v 2.622700 1.520700 0.286650
+v 2.639686 1.760016 -0.283910
+v 2.639686 1.760016 0.283910
+v 2.648521 2.296134 0.125510
+v 2.648521 2.296134 -0.125510
+v 2.649900 1.972725 0.253920
+v 2.649900 1.972725 -0.253920
+v 2.656300 1.480800 -0.218400
+v 2.656300 1.480800 0.218400
+v 2.667347 2.150664 -0.210701
+v 2.667347 2.150664 0.210701
+v 2.679100 1.453725 0.122850
+v 2.679100 1.453725 -0.122850
+v 2.682771 1.724928 0.248422
+v 2.682771 1.724928 -0.248422
+v 2.687500 1.443750 0.000000
+v 2.687500 1.443750 0.000000
+v 2.700000 2.400000 0.000000
+v 2.700000 2.400000 0.000000
+v 2.700000 2.400000 0.000000
+v 2.700871 1.947750 -0.243763
+v 2.700871 1.947750 0.243763
+v 2.701743 2.292186 0.164732
+v 2.701743 2.292186 -0.164732
+v 2.716800 2.400000 0.067500
+v 2.716800 2.400000 -0.067500
+v 2.716800 2.400000 -0.067500
+v 2.716800 2.400000 0.067500
+v 2.718253 1.696032 0.189274
+v 2.718253 1.696032 -0.189274
+v 2.725600 2.136900 -0.219480
+v 2.725600 2.136900 0.219480
+v 2.729800 2.420250 0.000000
+v 2.742330 1.676424 0.106466
+v 2.742330 1.676424 -0.106466
+v 2.747407 2.420406 -0.066744
+v 2.747407 2.420406 0.066744
+v 2.747710 1.924800 -0.213293
+v 2.747710 1.924800 0.213293
+v 2.751200 1.669200 0.000000
+v 2.751200 1.669200 0.000000
+v 2.758400 2.436000 0.000000
+v 2.762400 2.400000 0.120000
+v 2.762400 2.400000 -0.120000
+v 2.762400 2.400000 -0.120000
+v 2.762400 2.400000 0.120000
+v 2.766370 2.287392 0.188266
+v 2.766370 2.287392 -0.188266
+v 2.776365 2.436302 -0.064692
+v 2.776365 2.436302 0.064692
+v 2.783853 2.123136 -0.210701
+v 2.783853 2.123136 0.210701
+v 2.784600 2.447250 0.000000
+v 2.784600 2.447250 0.000000
+v 2.786282 1.905900 0.162509
+v 2.786282 1.905900 -0.162509
+v 2.795198 2.420829 -0.118656
+v 2.795198 2.420829 0.118656
+v 2.800000 2.400000 0.000000
+v 2.802528 2.447680 -0.061668
+v 2.802528 2.447680 0.061668
+v 2.807200 2.454000 0.000000
+v 2.811200 2.400000 -0.040500
+v 2.811200 2.400000 0.040500
+v 2.812457 1.893075 0.091411
+v 2.812457 1.893075 -0.091411
+v 2.822100 1.888350 0.000000
+v 2.822100 1.888350 0.000000
+v 2.824200 2.420250 0.000000
+v 2.824200 2.420250 0.000000
+v 2.824750 2.454529 -0.057996
+v 2.824750 2.454529 0.057996
+v 2.825000 2.456250 0.000000
+v 2.825000 2.456250 0.000000
+v 2.825126 2.437123 -0.115008
+v 2.825126 2.437123 0.115008
+v 2.829600 2.400000 0.157500
+v 2.829600 2.400000 -0.157500
+v 2.829600 2.400000 -0.157500
+v 2.829600 2.400000 0.157500
+v 2.836672 2.420519 -0.041256
+v 2.836672 2.420519 0.041256
+v 2.836700 2.282175 0.196110
+v 2.836700 2.282175 -0.196110
+v 2.836800 2.454000 0.000000
+v 2.836800 2.454000 0.000000
+v 2.837382 2.110488 -0.184363
+v 2.837382 2.110488 0.184363
+v 2.837600 2.436000 0.000000
+v 2.837600 2.436000 0.000000
+v 2.841400 2.447250 0.000000
+v 2.841400 2.447250 0.000000
+v 2.841600 2.400000 -0.072000
+v 2.841600 2.400000 0.072000
+v 2.841887 2.456841 -0.054000
+v 2.841887 2.456841 0.054000
+v 2.851189 2.448847 -0.109632
+v 2.851189 2.448847 0.109632
+v 2.851331 2.436454 -0.043308
+v 2.851331 2.436454 0.043308
+v 2.852794 2.454605 -0.050004
+v 2.852794 2.454605 0.050004
+v 2.856323 2.447812 -0.046332
+v 2.856323 2.447812 0.046332
+v 2.865626 2.421453 -0.155736
+v 2.865626 2.421453 0.155736
+v 2.870524 2.421250 -0.073344
+v 2.870524 2.421250 0.073344
+v 2.872387 2.455966 -0.103104
+v 2.872387 2.455966 0.103104
+v 2.881466 2.100072 -0.140467
+v 2.881466 2.100072 0.140467
+v 2.886400 2.400000 -0.094500
+v 2.886400 2.400000 0.094500
+v 2.887725 2.458444 -0.096000
+v 2.887725 2.458444 0.096000
+v 2.888602 2.437685 -0.076992
+v 2.888602 2.437685 0.076992
+v 2.896205 2.456246 0.088896
+v 2.896205 2.456246 -0.088896
+v 2.896829 2.449338 -0.082368
+v 2.896829 2.449338 0.082368
+v 2.896986 2.438333 -0.150948
+v 2.896986 2.438333 0.150948
+v 2.907030 2.276958 0.188266
+v 2.907030 2.276958 -0.188266
+v 2.911200 2.400000 -0.180000
+v 2.911200 2.400000 -0.180000
+v 2.911200 2.400000 0.180000
+v 2.911379 2.093004 -0.079013
+v 2.911379 2.093004 0.079013
+v 2.920412 2.422328 -0.096264
+v 2.920412 2.422328 0.096264
+v 2.922400 2.090400 0.000000
+v 2.922899 2.450567 -0.143892
+v 2.922899 2.450567 0.143892
+v 2.940800 2.400000 -0.108000
+v 2.940800 2.400000 0.108000
+v 2.942589 2.458082 -0.135324
+v 2.942589 2.458082 0.135324
+v 2.943526 2.439499 -0.101052
+v 2.943526 2.439499 0.101052
+v 2.951146 2.422210 -0.177984
+v 2.951146 2.422210 0.177984
+v 2.955275 2.460806 -0.126000
+v 2.955275 2.460806 0.126000
+v 2.956523 2.451588 -0.108108
+v 2.956523 2.451588 0.108108
+v 2.960179 2.458666 -0.116676
+v 2.960179 2.458666 0.116676
+v 2.971657 2.272164 0.164732
+v 2.971657 2.272164 -0.164732
+v 2.980990 2.423636 0.110016
+v 2.980990 2.423636 -0.110016
+v 2.984243 2.439802 -0.172512
+v 2.984243 2.439802 0.172512
+v 3.000000 2.400000 -0.187500
+v 3.000000 2.400000 -0.187500
+v 3.000000 2.400000 -0.112500
+v 3.000000 2.400000 0.112500
+v 3.000000 2.400000 0.187500
+v 3.009977 2.452655 -0.164448
+v 3.009977 2.452655 0.164448
+v 3.010221 2.441702 -0.115488
+v 3.010221 2.441702 0.115488
+v 3.024879 2.268216 0.125510
+v 3.024879 2.268216 -0.125510
+v 3.027834 2.460653 -0.154656
+v 3.027834 2.460653 0.154656
+v 3.029007 2.454319 -0.123552
+v 3.029007 2.454319 0.123552
+v 3.037300 2.463675 -0.144000
+v 3.037300 2.463675 0.144000
+v 3.037862 2.461603 0.133344
+v 3.037862 2.461603 -0.133344
+v 3.044212 2.423034 -0.185400
+v 3.044212 2.423034 0.185400
+v 3.046912 2.425059 0.114600
+v 3.046912 2.425059 -0.114600
+v 3.059200 2.400000 -0.108000
+v 3.059200 2.400000 0.108000
+v 3.060994 2.265537 0.070600
+v 3.060994 2.265537 -0.070600
+v 3.074300 2.264550 0.000000
+v 3.074300 2.264550 0.000000
+v 3.079200 2.441400 -0.179700
+v 3.079200 2.441400 0.179700
+v 3.082800 2.444100 -0.120300
+v 3.082800 2.444100 0.120300
+v 3.088800 2.400000 -0.180000
+v 3.088800 2.400000 -0.180000
+v 3.088800 2.400000 0.180000
+v 3.104737 2.454928 -0.171300
+v 3.104738 2.454928 0.171300
+v 3.107887 2.457291 -0.128700
+v 3.107887 2.457291 0.128700
+v 3.112835 2.426483 0.110016
+v 3.112835 2.426483 -0.110016
+v 3.113600 2.400000 -0.094500
+v 3.113600 2.400000 0.094500
+v 3.120600 2.463450 0.161100
+v 3.120600 2.463450 -0.161100
+v 3.122400 2.464800 0.138900
+v 3.122400 2.464800 -0.138900
+v 3.126562 2.466797 -0.150000
+v 3.126562 2.466797 0.150000
+v 3.137279 2.423859 -0.177984
+v 3.137279 2.423859 0.177984
+v 3.155379 2.446498 -0.115488
+v 3.155379 2.446498 0.115488
+v 3.158400 2.400000 -0.072000
+v 3.158400 2.400000 0.072000
+v 3.170400 2.400000 -0.157500
+v 3.170400 2.400000 0.157500
+v 3.170400 2.400000 -0.157500
+v 3.173413 2.427791 -0.096264
+v 3.173413 2.427791 0.096264
+v 3.174157 2.442998 -0.172512
+v 3.174157 2.442998 0.172512
+v 3.186768 2.460263 -0.123552
+v 3.186768 2.460263 0.123552
+v 3.188800 2.400000 -0.040500
+v 3.188800 2.400000 0.040500
+v 3.199498 2.457201 -0.164448
+v 3.199498 2.457201 0.164448
+v 3.200000 2.400000 0.000000
+v 3.206938 2.467997 0.133344
+v 3.206938 2.467997 -0.133344
+v 3.213366 2.466247 -0.154656
+v 3.213366 2.466247 0.154656
+v 3.215825 2.469919 -0.144000
+v 3.215825 2.469919 0.144000
+v 3.222074 2.448701 -0.101052
+v 3.222074 2.448701 0.101052
+v 3.222799 2.424616 -0.155736
+v 3.222799 2.424616 0.155736
+v 3.223301 2.428868 -0.073344
+v 3.223301 2.428868 0.073344
+v 3.237600 2.400000 -0.120000
+v 3.237600 2.400000 0.120000
+v 3.237600 2.400000 -0.120000
+v 3.257153 2.429599 -0.041256
+v 3.257153 2.429599 0.041256
+v 3.259252 2.462994 -0.108108
+v 3.259252 2.462994 0.108108
+v 3.261414 2.444467 -0.150948
+v 3.261414 2.444467 0.150948
+v 3.269625 2.429869 0.000000
+v 3.269625 2.429869 0.000000
+v 3.276998 2.450515 -0.076992
+v 3.276998 2.450515 0.076992
+v 3.283200 2.400000 -0.067500
+v 3.283200 2.400000 0.067500
+v 3.283200 2.400000 -0.067500
+v 3.284621 2.470934 -0.116676
+v 3.284621 2.470934 0.116676
+v 3.286576 2.459289 -0.143892
+v 3.286576 2.459289 0.143892
+v 3.293227 2.425240 -0.118656
+v 3.293227 2.425240 0.118656
+v 3.297850 2.472787 -0.126000
+v 3.297850 2.472788 0.126000
+v 3.298611 2.468818 -0.135324
+v 3.298611 2.468818 0.135324
+v 3.300000 2.400000 0.000000
+v 3.300000 2.400000 0.000000
+v 3.314269 2.451746 -0.043308
+v 3.314269 2.451746 0.043308
+v 3.318946 2.465243 -0.082368
+v 3.318946 2.465243 0.082368
+v 3.328000 2.452200 0.000000
+v 3.328000 2.452200 0.000000
+v 3.333274 2.445677 -0.115008
+v 3.333274 2.445677 0.115008
+v 3.341018 2.425663 -0.066744
+v 3.341018 2.425663 0.066744
+v 3.348595 2.473354 0.088896
+v 3.348595 2.473354 -0.088896
+v 3.358286 2.461009 -0.109632
+v 3.358286 2.461009 0.109632
+v 3.358625 2.425819 0.000000
+v 3.359452 2.466769 -0.046332
+v 3.359452 2.466769 0.046332
+v 3.365400 2.475150 -0.096000
+v 3.365400 2.475150 0.096000
+v 3.368813 2.470934 -0.103104
+v 3.368813 2.470934 0.103104
+v 3.374375 2.467331 0.000000
+v 3.374375 2.467331 0.000000
+v 3.382035 2.446498 -0.064692
+v 3.382035 2.446498 0.064692
+v 3.392006 2.474995 -0.050004
+v 3.392006 2.474995 0.050004
+v 3.400000 2.446800 0.000000
+v 3.406947 2.462176 -0.061668
+v 3.406947 2.462176 0.061668
+v 3.408000 2.475600 0.000000
+v 3.408000 2.475600 0.000000
+v 3.411237 2.476753 -0.054000
+v 3.411237 2.476753 0.054000
+v 3.416450 2.472371 -0.057996
+v 3.416450 2.472371 0.057996
+v 3.424875 2.462606 0.000000
+v 3.428125 2.477344 0.000000
+v 3.428125 2.477344 0.000000
+v 3.434000 2.472900 0.000000
+
+f 2909 2921 2939
+f 2939 2931 2909
+f 2869 2877 2921
+f 2921 2909 2869
+f 2819 2827 2877
+f 2877 2869 2819
+f 2737 2747 2827
+f 2827 2819 2737
+f 2669 2673 2747
+f 2747 2737 2669
+f 2567 2575 2673
+f 2673 2669 2567
+f 2476 2480 2575
+f 2575 2567 2476
+f 2358 2362 2480
+f 2480 2476 2358
+f 2158 2162 2362
+f 2362 2358 2158
+f 1715 1812 2162
+f 2162 2158 1715
+f 2901 2909 2931
+f 2931 2917 2901
+f 2863 2869 2909
+f 2909 2901 2863
+f 2813 2819 2869
+f 2869 2863 2813
+f 2729 2737 2819
+f 2819 2813 2729
+f 2663 2669 2737
+f 2737 2729 2663
+f 2561 2567 2669
+f 2669 2663 2561
+f 2468 2476 2567
+f 2567 2561 2468
+f 2350 2358 2476
+f 2476 2468 2350
+f 2152 2158 2358
+f 2358 2350 2152
+f 1717 1715 2158
+f 2158 2152 1717
+f 2903 2901 2917
+f 2917 2923 2903
+f 2865 2863 2901
+f 2901 2903 2865
+f 2815 2813 2863
+f 2863 2865 2815
+f 2733 2729 2813
+f 2813 2815 2733
+f 2665 2663 2729
+f 2729 2733 2665
+f 2564 2561 2663
+f 2663 2665 2564
+f 2473 2468 2561
+f 2561 2564 2473
+f 2354 2350 2468
+f 2468 2473 2354
+f 2155 2152 2350
+f 2350 2354 2155
+f 1927 1717 2152
+f 2152 2155 1927
+f 2911 2903 2923
+f 2923 2935 2911
+f 2875 2865 2903
+f 2903 2911 2875
+f 2823 2815 2865
+f 2865 2875 2823
+f 2741 2733 2815
+f 2815 2823 2741
+f 2671 2665 2733
+f 2733 2741 2671
+f 2571 2564 2665
+f 2665 2671 2571
+f 2478 2473 2564
+f 2564 2571 2478
+f 2360 2354 2473
+f 2473 2478 2360
+f 2160 2155 2354
+f 2354 2360 2160
+f 1718 1927 2155
+f 2155 2160 1718
+f 2929 2911 2935
+f 2935 2947 2929
+f 2881 2875 2911
+f 2911 2929 2881
+f 2829 2823 2875
+f 2875 2881 2829
+f 2751 2741 2823
+f 2823 2829 2751
+f 2677 2671 2741
+f 2741 2751 2677
+f 2577 2571 2671
+f 2671 2677 2577
+f 2482 2478 2571
+f 2571 2577 2482
+f 2364 2360 2478
+f 2478 2482 2364
+f 2164 2160 2360
+f 2360 2364 2164
+f 1842 1718 2160
+f 2160 2164 1842
+f 2945 2929 2947
+f 2947 2959 2945
+f 2897 2881 2929
+f 2929 2945 2897
+f 2835 2829 2881
+f 2881 2897 2835
+f 2761 2751 2829
+f 2829 2835 2761
+f 2679 2677 2751
+f 2751 2761 2679
+f 2579 2577 2677
+f 2677 2679 2579
+f 2486 2482 2577
+f 2577 2579 2486
+f 2368 2364 2482
+f 2482 2486 2368
+f 2172 2164 2364
+f 2364 2368 2172
+f 1725 1842 2164
+f 2164 2172 1725
+f 2965 2945 2959
+f 2959 2981 2965
+f 2907 2897 2945
+f 2945 2965 2907
+f 2845 2835 2897
+f 2897 2907 2845
+f 2769 2761 2835
+f 2835 2845 2769
+f 2685 2679 2761
+f 2761 2769 2685
+f 2587 2579 2679
+f 2679 2685 2587
+f 2491 2486 2579
+f 2579 2587 2491
+f 2370 2368 2486
+f 2486 2491 2370
+f 2174 2172 2368
+f 2368 2370 2174
+f 1834 1725 2172
+f 2172 2174 1834
+f 2982 2965 2981
+f 2981 2988 2982
+f 2933 2907 2965
+f 2965 2982 2933
+f 2855 2845 2907
+f 2907 2933 2855
+f 2779 2769 2845
+f 2845 2855 2779
+f 2691 2685 2769
+f 2769 2779 2691
+f 2595 2587 2685
+f 2685 2691 2595
+f 2500 2491 2587
+f 2587 2595 2500
+f 2374 2370 2491
+f 2491 2500 2374
+f 2178 2174 2370
+f 2370 2374 2178
+f 1716 1834 2174
+f 2174 2178 1716
+f 2990 2982 2988
+f 2988 3002 2990
+f 2949 2933 2982
+f 2982 2990 2949
+f 2871 2855 2933
+f 2933 2949 2871
+f 2791 2779 2855
+f 2855 2871 2791
+f 2699 2691 2779
+f 2779 2791 2699
+f 2601 2595 2691
+f 2691 2699 2601
+f 2506 2500 2595
+f 2595 2601 2506
+f 2378 2374 2500
+f 2500 2506 2378
+f 2180 2178 2374
+f 2374 2378 2180
+f 1714 1716 2178
+f 2178 2180 1714
+f 3008 2990 3002
+f 3002 3024 3008
+f 2973 2949 2990
+f 2990 3008 2973
+f 2889 2871 2949
+f 2949 2973 2889
+f 2805 2791 2871
+f 2871 2889 2805
+f 2711 2699 2791
+f 2791 2805 2711
+f 2611 2601 2699
+f 2699 2711 2611
+f 2521 2506 2601
+f 2601 2611 2521
+f 2387 2378 2506
+f 2506 2521 2387
+f 2191 2180 2378
+f 2378 2387 2191
+f 1810 1714 2180
+f 2180 2191 1810
+f 1464 1460 1813
+f 1813 1821 1464
+f 1264 1260 1460
+f 1460 1464 1264
+f 1146 1142 1260
+f 1260 1264 1146
+f 1055 1047 1142
+f 1142 1146 1055
+f 953 949 1047
+f 1047 1055 953
+f 885 875 949
+f 949 953 885
+f 803 795 875
+f 875 885 803
+f 753 745 795
+f 795 803 753
+f 713 701 745
+f 745 753 713
+f 691 683 701
+f 701 713 691
+f 1470 1464 1821
+f 1821 1829 1470
+f 1272 1264 1464
+f 1464 1470 1272
+f 1154 1146 1264
+f 1264 1272 1154
+f 1061 1055 1146
+f 1146 1154 1061
+f 959 953 1055
+f 1055 1061 959
+f 893 885 953
+f 953 959 893
+f 809 803 885
+f 885 893 809
+f 759 753 803
+f 803 809 759
+f 721 713 753
+f 753 759 721
+f 705 691 713
+f 713 721 705
+f 1469 1470 1829
+f 1829 1835 1469
+f 1268 1272 1470
+f 1470 1469 1268
+f 1151 1154 1272
+f 1272 1268 1151
+f 1060 1061 1154
+f 1154 1151 1060
+f 957 959 1061
+f 1061 1060 957
+f 889 893 959
+f 959 957 889
+f 807 809 893
+f 893 889 807
+f 757 759 809
+f 809 807 757
+f 719 721 759
+f 759 757 719
+f 699 705 721
+f 721 719 699
+f 1462 1469 1835
+f 1835 1839 1462
+f 1262 1268 1469
+f 1469 1462 1262
+f 1144 1151 1268
+f 1268 1262 1144
+f 1051 1060 1151
+f 1151 1144 1051
+f 951 957 1060
+f 1060 1051 951
+f 881 889 957
+f 957 951 881
+f 799 807 889
+f 889 881 799
+f 747 757 807
+f 807 799 747
+f 711 719 757
+f 757 747 711
+f 687 699 719
+f 719 711 687
+f 1458 1462 1839
+f 1839 1843 1458
+f 1258 1262 1462
+f 1462 1458 1258
+f 1140 1144 1262
+f 1262 1258 1140
+f 1045 1051 1144
+f 1144 1140 1045
+f 945 951 1051
+f 1051 1045 945
+f 871 881 951
+f 951 945 871
+f 793 799 881
+f 881 871 793
+f 741 747 799
+f 799 793 741
+f 693 711 747
+f 747 741 693
+f 675 687 711
+f 711 693 675
+f 1450 1458 1843
+f 1843 1838 1450
+f 1254 1258 1458
+f 1458 1450 1254
+f 1136 1140 1258
+f 1258 1254 1136
+f 1043 1045 1140
+f 1140 1136 1043
+f 943 945 1045
+f 1045 1043 943
+f 861 871 945
+f 945 943 861
+f 787 793 871
+f 871 861 787
+f 725 741 793
+f 793 787 725
+f 677 693 741
+f 741 725 677
+f 663 675 693
+f 693 677 663
+f 1448 1450 1838
+f 1838 1834 1448
+f 1252 1254 1450
+f 1450 1448 1252
+f 1133 1136 1254
+f 1254 1252 1133
+f 1035 1043 1136
+f 1136 1133 1035
+f 937 943 1043
+f 1043 1035 937
+f 853 861 943
+f 943 937 853
+f 777 787 861
+f 861 853 777
+f 715 725 787
+f 787 777 715
+f 657 677 725
+f 725 715 657
+f 642 663 677
+f 677 657 642
+f 1444 1448 1834
+f 1834 1828 1444
+f 1248 1252 1448
+f 1448 1444 1248
+f 1122 1133 1252
+f 1252 1248 1122
+f 1027 1035 1133
+f 1133 1122 1027
+f 931 937 1035
+f 1035 1027 931
+f 843 853 937
+f 937 931 843
+f 767 777 853
+f 853 843 767
+f 689 715 777
+f 777 767 689
+f 640 657 715
+f 715 689 640
+f 634 642 657
+f 657 640 634
+f 1442 1444 1828
+f 1828 1820 1442
+f 1244 1248 1444
+f 1444 1442 1244
+f 1116 1122 1248
+f 1248 1244 1116
+f 1021 1027 1122
+f 1122 1116 1021
+f 923 931 1027
+f 1027 1021 923
+f 831 843 931
+f 931 923 831
+f 751 767 843
+f 843 831 751
+f 673 689 767
+f 767 751 673
+f 632 640 689
+f 689 673 632
+f 620 634 640
+f 640 632 620
+f 1429 1442 1820
+f 1820 1811 1429
+f 1233 1244 1442
+f 1442 1429 1233
+f 1106 1116 1244
+f 1244 1233 1106
+f 1011 1021 1116
+f 1116 1106 1011
+f 911 923 1021
+f 1021 1011 911
+f 817 831 923
+f 923 911 817
+f 733 751 831
+f 831 817 733
+f 649 673 751
+f 751 733 649
+f 614 632 673
+f 673 649 614
+f 597 620 632
+f 632 614 597
+f 714 702 684
+f 684 692 714
+f 754 746 702
+f 702 714 754
+f 804 796 746
+f 746 754 804
+f 886 876 796
+f 796 804 886
+f 954 950 876
+f 876 886 954
+f 1056 1048 950
+f 950 954 1056
+f 1147 1143 1048
+f 1048 1056 1147
+f 1265 1261 1143
+f 1143 1147 1265
+f 1465 1461 1261
+f 1261 1265 1465
+f 1915 1817 1461
+f 1461 1465 1915
+f 722 714 692
+f 692 706 722
+f 760 754 714
+f 714 722 760
+f 810 804 754
+f 754 760 810
+f 894 886 804
+f 804 810 894
+f 960 954 886
+f 886 894 960
+f 1062 1056 954
+f 954 960 1062
+f 1155 1147 1056
+f 1056 1062 1155
+f 1273 1265 1147
+f 1147 1155 1273
+f 1471 1465 1265
+f 1265 1273 1471
+f 1917 1915 1465
+f 1465 1471 1917
+f 720 722 706
+f 706 700 720
+f 758 760 722
+f 722 720 758
+f 808 810 760
+f 760 758 808
+f 890 894 810
+f 810 808 890
+f 958 960 894
+f 894 890 958
+f 1059 1062 960
+f 960 958 1059
+f 1150 1155 1062
+f 1062 1059 1150
+f 1269 1273 1155
+f 1155 1150 1269
+f 1468 1471 1273
+f 1273 1269 1468
+f 1697 1917 1471
+f 1471 1468 1697
+f 712 720 700
+f 700 688 712
+f 748 758 720
+f 720 712 748
+f 800 808 758
+f 758 748 800
+f 882 890 808
+f 808 800 882
+f 952 958 890
+f 890 882 952
+f 1052 1059 958
+f 958 952 1052
+f 1145 1150 1059
+f 1059 1052 1145
+f 1263 1269 1150
+f 1150 1145 1263
+f 1463 1468 1269
+f 1269 1263 1463
+f 1919 1697 1468
+f 1468 1463 1919
+f 694 712 688
+f 688 676 694
+f 742 748 712
+f 712 694 742
+f 794 800 748
+f 748 742 794
+f 872 882 800
+f 800 794 872
+f 946 952 882
+f 882 872 946
+f 1046 1052 952
+f 952 946 1046
+f 1141 1145 1052
+f 1052 1046 1141
+f 1259 1263 1145
+f 1145 1141 1259
+f 1459 1463 1263
+f 1263 1259 1459
+f 1845 1919 1463
+f 1463 1459 1845
+f 678 694 676
+f 676 664 678
+f 726 742 694
+f 694 678 726
+f 788 794 742
+f 742 726 788
+f 862 872 794
+f 794 788 862
+f 944 946 872
+f 872 862 944
+f 1044 1046 946
+f 946 944 1044
+f 1137 1141 1046
+f 1046 1044 1137
+f 1255 1259 1141
+f 1141 1137 1255
+f 1451 1459 1259
+f 1259 1255 1451
+f 1898 1845 1459
+f 1459 1451 1898
+f 658 678 664
+f 664 642 658
+f 716 726 678
+f 678 658 716
+f 778 788 726
+f 726 716 778
+f 854 862 788
+f 788 778 854
+f 938 944 862
+f 862 854 938
+f 1036 1044 944
+f 944 938 1036
+f 1132 1137 1044
+f 1044 1036 1132
+f 1253 1255 1137
+f 1137 1132 1253
+f 1449 1451 1255
+f 1255 1253 1449
+f 1837 1898 1451
+f 1451 1449 1837
+f 641 658 642
+f 642 635 641
+f 690 716 658
+f 658 641 690
+f 768 778 716
+f 716 690 768
+f 844 854 778
+f 778 768 844
+f 932 938 854
+f 854 844 932
+f 1028 1036 938
+f 938 932 1028
+f 1123 1132 1036
+f 1036 1028 1123
+f 1249 1253 1132
+f 1132 1123 1249
+f 1445 1449 1253
+f 1253 1249 1445
+f 1918 1837 1449
+f 1449 1445 1918
+f 633 641 635
+f 635 621 633
+f 674 690 641
+f 641 633 674
+f 752 768 690
+f 690 674 752
+f 832 844 768
+f 768 752 832
+f 924 932 844
+f 844 832 924
+f 1022 1028 932
+f 932 924 1022
+f 1117 1123 1028
+f 1028 1022 1117
+f 1245 1249 1123
+f 1123 1117 1245
+f 1443 1445 1249
+f 1249 1245 1443
+f 1916 1918 1445
+f 1445 1443 1916
+f 616 633 621
+f 621 600 616
+f 654 674 633
+f 633 616 654
+f 737 752 674
+f 674 654 737
+f 822 832 752
+f 752 737 822
+f 914 924 832
+f 832 822 914
+f 1014 1022 924
+f 924 914 1014
+f 1104 1117 1022
+f 1022 1014 1104
+f 1237 1245 1117
+f 1117 1104 1237
+f 1433 1443 1245
+f 1245 1237 1433
+f 1819 1916 1443
+f 1443 1433 1819
+f 2159 2163 1816
+f 1816 1822 2159
+f 2359 2363 2163
+f 2163 2159 2359
+f 2477 2481 2363
+f 2363 2359 2477
+f 2568 2576 2481
+f 2481 2477 2568
+f 2670 2674 2576
+f 2576 2568 2670
+f 2738 2748 2674
+f 2674 2670 2738
+f 2820 2828 2748
+f 2748 2738 2820
+f 2870 2878 2828
+f 2828 2820 2870
+f 2910 2922 2878
+f 2878 2870 2910
+f 2932 2940 2922
+f 2922 2910 2932
+f 2153 2159 1822
+f 1822 1830 2153
+f 2351 2359 2159
+f 2159 2153 2351
+f 2469 2477 2359
+f 2359 2351 2469
+f 2562 2568 2477
+f 2477 2469 2562
+f 2664 2670 2568
+f 2568 2562 2664
+f 2730 2738 2670
+f 2670 2664 2730
+f 2814 2820 2738
+f 2738 2730 2814
+f 2864 2870 2820
+f 2820 2814 2864
+f 2902 2910 2870
+f 2870 2864 2902
+f 2918 2932 2910
+f 2910 2902 2918
+f 2154 2153 1830
+f 1830 1836 2154
+f 2355 2351 2153
+f 2153 2154 2355
+f 2472 2469 2351
+f 2351 2355 2472
+f 2563 2562 2469
+f 2469 2472 2563
+f 2666 2664 2562
+f 2562 2563 2666
+f 2734 2730 2664
+f 2664 2666 2734
+f 2816 2814 2730
+f 2730 2734 2816
+f 2866 2864 2814
+f 2814 2816 2866
+f 2904 2902 2864
+f 2864 2866 2904
+f 2924 2918 2902
+f 2902 2904 2924
+f 2161 2154 1836
+f 1836 1840 2161
+f 2361 2355 2154
+f 2154 2161 2361
+f 2479 2472 2355
+f 2355 2361 2479
+f 2572 2563 2472
+f 2472 2479 2572
+f 2672 2666 2563
+f 2563 2572 2672
+f 2742 2734 2666
+f 2666 2672 2742
+f 2824 2816 2734
+f 2734 2742 2824
+f 2876 2866 2816
+f 2816 2824 2876
+f 2912 2904 2866
+f 2866 2876 2912
+f 2936 2924 2904
+f 2904 2912 2936
+f 2165 2161 1840
+f 1840 1844 2165
+f 2365 2361 2161
+f 2161 2165 2365
+f 2483 2479 2361
+f 2361 2365 2483
+f 2578 2572 2479
+f 2479 2483 2578
+f 2678 2672 2572
+f 2572 2578 2678
+f 2752 2742 2672
+f 2672 2678 2752
+f 2830 2824 2742
+f 2742 2752 2830
+f 2882 2876 2824
+f 2824 2830 2882
+f 2930 2912 2876
+f 2876 2882 2930
+f 2948 2936 2912
+f 2912 2930 2948
+f 2173 2165 1844
+f 1844 1841 2173
+f 2369 2365 2165
+f 2165 2173 2369
+f 2487 2483 2365
+f 2365 2369 2487
+f 2580 2578 2483
+f 2483 2487 2580
+f 2680 2678 2578
+f 2578 2580 2680
+f 2762 2752 2678
+f 2678 2680 2762
+f 2836 2830 2752
+f 2752 2762 2836
+f 2898 2882 2830
+f 2830 2836 2898
+f 2946 2930 2882
+f 2882 2898 2946
+f 2960 2948 2930
+f 2930 2946 2960
+f 2175 2173 1841
+f 1841 1837 2175
+f 2371 2369 2173
+f 2173 2175 2371
+f 2490 2487 2369
+f 2369 2371 2490
+f 2588 2580 2487
+f 2487 2490 2588
+f 2686 2680 2580
+f 2580 2588 2686
+f 2770 2762 2680
+f 2680 2686 2770
+f 2846 2836 2762
+f 2762 2770 2846
+f 2908 2898 2836
+f 2836 2846 2908
+f 2966 2946 2898
+f 2898 2908 2966
+f 2981 2960 2946
+f 2946 2966 2981
+f 2179 2175 1837
+f 1837 1831 2179
+f 2375 2371 2175
+f 2175 2179 2375
+f 2501 2490 2371
+f 2371 2375 2501
+f 2596 2588 2490
+f 2490 2501 2596
+f 2692 2686 2588
+f 2588 2596 2692
+f 2780 2770 2686
+f 2686 2692 2780
+f 2856 2846 2770
+f 2770 2780 2856
+f 2934 2908 2846
+f 2846 2856 2934
+f 2983 2966 2908
+f 2908 2934 2983
+f 2989 2981 2966
+f 2966 2983 2989
+f 2181 2179 1831
+f 1831 1823 2181
+f 2379 2375 2179
+f 2179 2181 2379
+f 2507 2501 2375
+f 2375 2379 2507
+f 2602 2596 2501
+f 2501 2507 2602
+f 2700 2692 2596
+f 2596 2602 2700
+f 2792 2780 2692
+f 2692 2700 2792
+f 2872 2856 2780
+f 2780 2792 2872
+f 2950 2934 2856
+f 2856 2872 2950
+f 2991 2983 2934
+f 2934 2950 2991
+f 3003 2989 2983
+f 2983 2991 3003
+f 2194 2181 1823
+f 1823 1818 2194
+f 2391 2379 2181
+f 2181 2194 2391
+f 2518 2507 2379
+f 2379 2391 2518
+f 2614 2602 2507
+f 2507 2518 2614
+f 2712 2700 2602
+f 2602 2614 2712
+f 2806 2792 2700
+f 2700 2712 2806
+f 2890 2872 2792
+f 2792 2806 2890
+f 2974 2950 2872
+f 2872 2890 2974
+f 3009 2991 2950
+f 2950 2974 3009
+f 3025 3003 2991
+f 2991 3009 3025
+f 3040 3008 3024
+f 3024 3048 3040
+f 3018 2973 3008
+f 3008 3040 3018
+f 2943 2889 2973
+f 2973 3018 2943
+f 2841 2805 2889
+f 2889 2943 2841
+f 2731 2711 2805
+f 2805 2841 2731
+f 2645 2611 2711
+f 2711 2731 2645
+f 2529 2521 2611
+f 2611 2645 2529
+f 2402 2387 2521
+f 2521 2529 2402
+f 2208 2191 2387
+f 2387 2402 2208
+f 1806 1810 2191
+f 2191 2208 1806
+f 3072 3040 3048
+f 3048 3078 3072
+f 3044 3018 3040
+f 3040 3072 3044
+f 2994 2943 3018
+f 3018 3044 2994
+f 2883 2841 2943
+f 2943 2994 2883
+f 2773 2731 2841
+f 2841 2883 2773
+f 2659 2645 2731
+f 2731 2773 2659
+f 2539 2529 2645
+f 2645 2659 2539
+f 2410 2402 2529
+f 2529 2539 2410
+f 2222 2208 2402
+f 2402 2410 2222
+f 1694 1806 2208
+f 2208 2222 1694
+f 3092 3072 3078
+f 3078 3116 3092
+f 3074 3044 3072
+f 3072 3092 3074
+f 3030 2994 3044
+f 3044 3074 3030
+f 2937 2883 2994
+f 2994 3030 2937
+f 2810 2773 2883
+f 2883 2937 2810
+f 2683 2659 2773
+f 2773 2810 2683
+f 2554 2539 2659
+f 2659 2683 2554
+f 2420 2410 2539
+f 2539 2554 2420
+f 2238 2222 2410
+f 2410 2420 2238
+f 1930 1694 2222
+f 2222 2238 1930
+f 3132 3092 3116
+f 3116 3142 3132
+f 3090 3074 3092
+f 3092 3132 3090
+f 3054 3030 3074
+f 3074 3090 3054
+f 2984 2937 3030
+f 3030 3054 2984
+f 2837 2810 2937
+f 2937 2984 2837
+f 2705 2683 2810
+f 2810 2837 2705
+f 2574 2554 2683
+f 2683 2705 2574
+f 2430 2420 2554
+f 2554 2574 2430
+f 2247 2238 2420
+f 2420 2430 2247
+f 1913 1930 2238
+f 2238 2247 1913
+f 3150 3132 3142
+f 3142 3156 3150
+f 3128 3090 3132
+f 3132 3150 3128
+f 3076 3054 3090
+f 3090 3128 3076
+f 3014 2984 3054
+f 3054 3076 3014
+f 2861 2837 2984
+f 2984 3014 2861
+f 2723 2705 2837
+f 2837 2861 2723
+f 2585 2574 2705
+f 2705 2723 2585
+f 2438 2430 2574
+f 2574 2585 2438
+f 2253 2247 2430
+f 2430 2438 2253
+f 1711 1913 2247
+f 2247 2253 1711
+f 3162 3150 3156
+f 3156 3172 3162
+f 3148 3128 3150
+f 3150 3162 3148
+f 3088 3076 3128
+f 3128 3148 3088
+f 3036 3014 3076
+f 3076 3088 3036
+f 2893 2861 3014
+f 3014 3036 2893
+f 2743 2723 2861
+f 2861 2893 2743
+f 2599 2585 2723
+f 2723 2743 2599
+f 2450 2438 2585
+f 2585 2599 2450
+f 2267 2253 2438
+f 2438 2450 2267
+f 1794 1711 2253
+f 2253 2267 1794
+f 3178 3162 3172
+f 3172 3184 3178
+f 3154 3148 3162
+f 3162 3178 3154
+f 3118 3088 3148
+f 3148 3154 3118
+f 3046 3036 3088
+f 3088 3118 3046
+f 2915 2893 3036
+f 3036 3046 2915
+f 2763 2743 2893
+f 2893 2915 2763
+f 2615 2599 2743
+f 2743 2763 2615
+f 2452 2450 2599
+f 2599 2615 2452
+f 2277 2267 2450
+f 2450 2452 2277
+f 1710 1794 2267
+f 2267 2277 1710
+f 3188 3178 3184
+f 3184 3200 3188
+f 3164 3154 3178
+f 3178 3188 3164
+f 3130 3118 3154
+f 3154 3164 3130
+f 3058 3046 3118
+f 3118 3130 3058
+f 2941 2915 3046
+f 3046 3058 2941
+f 2775 2763 2915
+f 2915 2941 2775
+f 2627 2615 2763
+f 2763 2775 2627
+f 2458 2452 2615
+f 2615 2627 2458
+f 2287 2277 2452
+f 2452 2458 2287
+f 1910 1710 2277
+f 2277 2287 1910
+f 3198 3188 3200
+f 3200 3209 3198
+f 3170 3164 3188
+f 3188 3198 3170
+f 3136 3130 3164
+f 3164 3170 3136
+f 3064 3058 3130
+f 3130 3136 3064
+f 2955 2941 3058
+f 3058 3064 2955
+f 2781 2775 2941
+f 2941 2955 2781
+f 2636 2627 2775
+f 2775 2781 2636
+f 2462 2458 2627
+f 2627 2636 2462
+f 2295 2287 2458
+f 2458 2462 2295
+f 1909 1910 2287
+f 2287 2295 1909
+f 3202 3198 3209
+f 3209 3213 3202
+f 3174 3170 3198
+f 3198 3202 3174
+f 3138 3136 3170
+f 3170 3174 3138
+f 3066 3064 3136
+f 3136 3138 3066
+f 2961 2955 3064
+f 3064 3066 2961
+f 2783 2781 2955
+f 2955 2961 2783
+f 2642 2636 2781
+f 2781 2783 2642
+f 2464 2462 2636
+f 2636 2642 2464
+f 2297 2295 2462
+f 2462 2464 2297
+f 1784 1909 2295
+f 2295 2297 1784
+f 1414 1429 1811
+f 1811 1807 1414
+f 1220 1233 1429
+f 1429 1414 1220
+f 1093 1106 1233
+f 1233 1220 1093
+f 977 1011 1106
+f 1106 1093 977
+f 891 911 1011
+f 1011 977 891
+f 781 817 911
+f 911 891 781
+f 679 733 817
+f 817 781 679
+f 604 649 733
+f 733 679 604
+f 571 614 649
+f 649 604 571
+f 561 597 614
+f 614 571 561
+f 1400 1414 1807
+f 1807 1804 1400
+f 1212 1220 1414
+f 1414 1400 1212
+f 1083 1093 1220
+f 1220 1212 1083
+f 963 977 1093
+f 1093 1083 963
+f 849 891 977
+f 977 963 849
+f 739 781 891
+f 891 849 739
+f 628 679 781
+f 781 739 628
+f 565 604 679
+f 679 628 565
+f 530 571 604
+f 604 565 530
+f 524 561 571
+f 571 530 524
+f 1386 1400 1804
+f 1804 1802 1386
+f 1202 1212 1400
+f 1400 1386 1202
+f 1070 1083 1212
+f 1212 1202 1070
+f 939 963 1083
+f 1083 1070 939
+f 814 849 963
+f 963 939 814
+f 685 739 849
+f 849 814 685
+f 585 628 739
+f 739 685 585
+f 528 565 628
+f 628 585 528
+f 510 530 565
+f 565 528 510
+f 508 524 530
+f 530 510 508
+f 1375 1386 1802
+f 1802 1800 1375
+f 1192 1202 1386
+f 1386 1375 1192
+f 1050 1070 1202
+f 1202 1192 1050
+f 917 939 1070
+f 1070 1050 917
+f 785 814 939
+f 939 917 785
+f 638 685 814
+f 814 785 638
+f 553 585 685
+f 685 638 553
+f 512 528 585
+f 585 553 512
+f 492 510 528
+f 528 512 492
+f 482 508 510
+f 510 492 482
+f 1369 1375 1800
+f 1800 1798 1369
+f 1184 1192 1375
+f 1375 1369 1184
+f 1037 1050 1192
+f 1192 1184 1037
+f 899 917 1050
+f 1050 1037 899
+f 761 785 917
+f 917 899 761
+f 608 638 785
+f 785 761 608
+f 526 553 638
+f 638 608 526
+f 496 512 553
+f 553 526 496
+f 454 492 512
+f 512 496 454
+f 448 482 492
+f 492 454 448
+f 1355 1369 1798
+f 1798 1795 1355
+f 1172 1184 1369
+f 1369 1355 1172
+f 1023 1037 1184
+f 1184 1172 1023
+f 879 899 1037
+f 1037 1023 879
+f 729 761 899
+f 899 879 729
+f 579 608 761
+f 761 729 579
+f 514 526 608
+f 608 579 514
+f 457 496 526
+f 526 514 457
+f 442 454 496
+f 496 457 442
+f 432 448 454
+f 454 442 432
+f 1345 1355 1795
+f 1795 1792 1345
+f 1170 1172 1355
+f 1355 1345 1170
+f 1007 1023 1172
+f 1172 1170 1007
+f 859 879 1023
+f 1023 1007 859
+f 707 729 879
+f 879 859 707
+f 563 579 729
+f 729 707 563
+f 506 514 579
+f 579 563 506
+f 450 457 514
+f 514 506 450
+f 420 442 457
+f 457 450 420
+f 412 432 442
+f 442 420 412
+f 1335 1345 1792
+f 1792 1790 1335
+f 1164 1170 1345
+f 1345 1335 1164
+f 995 1007 1170
+f 1170 1164 995
+f 847 859 1007
+f 1007 995 847
+f 681 707 859
+f 859 847 681
+f 547 563 707
+f 707 681 547
+f 494 506 563
+f 563 547 494
+f 440 450 506
+f 506 494 440
+f 410 420 450
+f 450 440 410
+f 398 412 420
+f 420 410 398
+f 1327 1335 1790
+f 1790 1788 1327
+f 1160 1164 1335
+f 1335 1327 1160
+f 988 995 1164
+f 1164 1160 988
+f 841 847 995
+f 995 988 841
+f 667 681 847
+f 847 841 667
+f 538 547 681
+f 681 667 538
+f 488 494 547
+f 547 538 488
+f 434 440 494
+f 494 488 434
+f 400 410 440
+f 440 434 400
+f 381 398 410
+f 410 400 381
+f 1324 1327 1788
+f 1788 1785 1324
+f 1156 1160 1327
+f 1327 1324 1156
+f 979 988 1160
+f 1160 1156 979
+f 837 841 988
+f 988 979 837
+f 659 667 841
+f 841 837 659
+f 534 538 667
+f 667 659 534
+f 484 488 538
+f 538 534 484
+f 428 434 488
+f 488 484 428
+f 395 400 434
+f 434 428 395
+f 374 381 400
+f 400 395 374
+f 572 616 600
+f 600 562 572
+f 605 654 616
+f 616 572 605
+f 680 737 654
+f 654 605 680
+f 782 822 737
+f 737 680 782
+f 892 914 822
+f 822 782 892
+f 978 1014 914
+f 914 892 978
+f 1094 1104 1014
+f 1014 978 1094
+f 1221 1237 1104
+f 1104 1094 1221
+f 1415 1433 1237
+f 1237 1221 1415
+f 1809 1819 1433
+f 1433 1415 1809
+f 531 572 562
+f 562 525 531
+f 566 605 572
+f 572 531 566
+f 629 680 605
+f 605 566 629
+f 740 782 680
+f 680 629 740
+f 850 892 782
+f 782 740 850
+f 964 978 892
+f 892 850 964
+f 1084 1094 978
+f 978 964 1084
+f 1213 1221 1094
+f 1094 1084 1213
+f 1401 1415 1221
+f 1221 1213 1401
+f 1931 1809 1415
+f 1415 1401 1931
+f 511 531 525
+f 525 509 511
+f 529 566 531
+f 531 511 529
+f 586 629 566
+f 566 529 586
+f 686 740 629
+f 629 586 686
+f 813 850 740
+f 740 686 813
+f 940 964 850
+f 850 813 940
+f 1069 1084 964
+f 964 940 1069
+f 1203 1213 1084
+f 1084 1069 1203
+f 1385 1401 1213
+f 1213 1203 1385
+f 1693 1931 1401
+f 1401 1385 1693
+f 493 511 509
+f 509 483 493
+f 513 529 511
+f 511 493 513
+f 554 586 529
+f 529 513 554
+f 639 686 586
+f 586 554 639
+f 786 813 686
+f 686 639 786
+f 918 940 813
+f 813 786 918
+f 1049 1069 940
+f 940 918 1049
+f 1193 1203 1069
+f 1069 1049 1193
+f 1376 1385 1203
+f 1203 1193 1376
+f 1712 1693 1385
+f 1385 1376 1712
+f 455 493 483
+f 483 449 455
+f 497 513 493
+f 493 455 497
+f 527 554 513
+f 513 497 527
+f 609 639 554
+f 554 527 609
+f 762 786 639
+f 639 609 762
+f 900 918 786
+f 786 762 900
+f 1038 1049 918
+f 918 900 1038
+f 1185 1193 1049
+f 1049 1038 1185
+f 1370 1376 1193
+f 1193 1185 1370
+f 1912 1712 1376
+f 1376 1370 1912
+f 443 455 449
+f 449 433 443
+f 458 497 455
+f 455 443 458
+f 515 527 497
+f 497 458 515
+f 580 609 527
+f 527 515 580
+f 730 762 609
+f 609 580 730
+f 880 900 762
+f 762 730 880
+f 1024 1038 900
+f 900 880 1024
+f 1173 1185 1038
+f 1038 1024 1173
+f 1356 1370 1185
+f 1185 1173 1356
+f 1797 1912 1370
+f 1370 1356 1797
+f 421 443 433
+f 433 413 421
+f 451 458 443
+f 443 421 451
+f 507 515 458
+f 458 451 507
+f 564 580 515
+f 515 507 564
+f 708 730 580
+f 580 564 708
+f 860 880 730
+f 730 708 860
+f 1008 1024 880
+f 880 860 1008
+f 1171 1173 1024
+f 1024 1008 1171
+f 1346 1356 1173
+f 1173 1171 1346
+f 1911 1797 1356
+f 1356 1346 1911
+f 411 421 413
+f 413 399 411
+f 441 451 421
+f 421 411 441
+f 495 507 451
+f 451 441 495
+f 548 564 507
+f 507 495 548
+f 682 708 564
+f 564 548 682
+f 848 860 708
+f 708 682 848
+f 996 1008 860
+f 860 848 996
+f 1165 1171 1008
+f 1008 996 1165
+f 1336 1346 1171
+f 1171 1165 1336
+f 1709 1911 1346
+f 1346 1336 1709
+f 401 411 399
+f 399 382 401
+f 435 441 411
+f 411 401 435
+f 489 495 441
+f 441 435 489
+f 539 548 495
+f 495 489 539
+f 668 682 548
+f 548 539 668
+f 842 848 682
+f 682 668 842
+f 987 996 848
+f 848 842 987
+f 1161 1165 996
+f 996 987 1161
+f 1328 1336 1165
+f 1165 1161 1328
+f 1708 1709 1336
+f 1336 1328 1708
+f 397 401 382
+f 382 376 397
+f 431 435 401
+f 401 397 431
+f 487 489 435
+f 435 431 487
+f 537 539 489
+f 489 487 537
+f 662 668 539
+f 539 537 662
+f 840 842 668
+f 668 662 840
+f 981 987 842
+f 842 840 981
+f 1159 1161 987
+f 987 981 1159
+f 1326 1328 1161
+f 1161 1159 1326
+f 1787 1708 1328
+f 1328 1326 1787
+f 2209 2194 1818
+f 1818 1808 2209
+f 2403 2391 2194
+f 2194 2209 2403
+f 2530 2518 2391
+f 2391 2403 2530
+f 2646 2614 2518
+f 2518 2530 2646
+f 2732 2712 2614
+f 2614 2646 2732
+f 2842 2806 2712
+f 2712 2732 2842
+f 2944 2890 2806
+f 2806 2842 2944
+f 3019 2974 2890
+f 2890 2944 3019
+f 3041 3009 2974
+f 2974 3019 3041
+f 3049 3025 3009
+f 3009 3041 3049
+f 2223 2209 1808
+f 1808 1805 2223
+f 2411 2403 2209
+f 2209 2223 2411
+f 2540 2530 2403
+f 2403 2411 2540
+f 2660 2646 2530
+f 2530 2540 2660
+f 2774 2732 2646
+f 2646 2660 2774
+f 2884 2842 2732
+f 2732 2774 2884
+f 2995 2944 2842
+f 2842 2884 2995
+f 3045 3019 2944
+f 2944 2995 3045
+f 3073 3041 3019
+f 3019 3045 3073
+f 3079 3049 3041
+f 3041 3073 3079
+f 2237 2223 1805
+f 1805 1803 2237
+f 2421 2411 2223
+f 2223 2237 2421
+f 2553 2540 2411
+f 2411 2421 2553
+f 2684 2660 2540
+f 2540 2553 2684
+f 2809 2774 2660
+f 2660 2684 2809
+f 2938 2884 2774
+f 2774 2809 2938
+f 3031 2995 2884
+f 2884 2938 3031
+f 3075 3045 2995
+f 2995 3031 3075
+f 3093 3073 3045
+f 3045 3075 3093
+f 3117 3079 3073
+f 3073 3093 3117
+f 2248 2237 1803
+f 1803 1801 2248
+f 2431 2421 2237
+f 2237 2248 2431
+f 2573 2553 2421
+f 2421 2431 2573
+f 2706 2684 2553
+f 2553 2573 2706
+f 2838 2809 2684
+f 2684 2706 2838
+f 2985 2938 2809
+f 2809 2838 2985
+f 3055 3031 2938
+f 2938 2985 3055
+f 3091 3075 3031
+f 3031 3055 3091
+f 3133 3093 3075
+f 3075 3091 3133
+f 3143 3117 3093
+f 3093 3133 3143
+f 2254 2248 1801
+f 1801 1799 2254
+f 2439 2431 2248
+f 2248 2254 2439
+f 2586 2573 2431
+f 2431 2439 2586
+f 2724 2706 2573
+f 2573 2586 2724
+f 2862 2838 2706
+f 2706 2724 2862
+f 3015 2985 2838
+f 2838 2862 3015
+f 3077 3055 2985
+f 2985 3015 3077
+f 3129 3091 3055
+f 3055 3077 3129
+f 3151 3133 3091
+f 3091 3129 3151
+f 3157 3143 3133
+f 3133 3151 3157
+f 2268 2254 1799
+f 1799 1796 2268
+f 2451 2439 2254
+f 2254 2268 2451
+f 2600 2586 2439
+f 2439 2451 2600
+f 2744 2724 2586
+f 2586 2600 2744
+f 2894 2862 2724
+f 2724 2744 2894
+f 3037 3015 2862
+f 2862 2894 3037
+f 3089 3077 3015
+f 3015 3037 3089
+f 3149 3129 3077
+f 3077 3089 3149
+f 3163 3151 3129
+f 3129 3149 3163
+f 3173 3157 3151
+f 3151 3163 3173
+f 2278 2268 1796
+f 1796 1793 2278
+f 2453 2451 2268
+f 2268 2278 2453
+f 2616 2600 2451
+f 2451 2453 2616
+f 2764 2744 2600
+f 2600 2616 2764
+f 2916 2894 2744
+f 2744 2764 2916
+f 3047 3037 2894
+f 2894 2916 3047
+f 3119 3089 3037
+f 3037 3047 3119
+f 3155 3149 3089
+f 3089 3119 3155
+f 3179 3163 3149
+f 3149 3155 3179
+f 3185 3173 3163
+f 3163 3179 3185
+f 2288 2278 1793
+f 1793 1791 2288
+f 2459 2453 2278
+f 2278 2288 2459
+f 2628 2616 2453
+f 2453 2459 2628
+f 2776 2764 2616
+f 2616 2628 2776
+f 2942 2916 2764
+f 2764 2776 2942
+f 3059 3047 2916
+f 2916 2942 3059
+f 3131 3119 3047
+f 3047 3059 3131
+f 3165 3155 3119
+f 3119 3131 3165
+f 3189 3179 3155
+f 3155 3165 3189
+f 3201 3185 3179
+f 3179 3189 3201
+f 2296 2288 1791
+f 1791 1789 2296
+f 2463 2459 2288
+f 2288 2296 2463
+f 2635 2628 2459
+f 2459 2463 2635
+f 2782 2776 2628
+f 2628 2635 2782
+f 2956 2942 2776
+f 2776 2782 2956
+f 3065 3059 2942
+f 2942 2956 3065
+f 3137 3131 3059
+f 3059 3065 3137
+f 3171 3165 3131
+f 3131 3137 3171
+f 3199 3189 3165
+f 3165 3171 3199
+f 3210 3201 3189
+f 3189 3199 3210
+f 2299 2296 1789
+f 1789 1786 2299
+f 2467 2463 2296
+f 2296 2299 2467
+f 2644 2635 2463
+f 2463 2467 2644
+f 2786 2782 2635
+f 2635 2644 2786
+f 2964 2956 2782
+f 2782 2786 2964
+f 3069 3065 2956
+f 2956 2964 3069
+f 3141 3137 3065
+f 3065 3069 3141
+f 3177 3171 3137
+f 3137 3141 3177
+f 3204 3199 3171
+f 3171 3177 3204
+f 3214 3210 3199
+f 3199 3204 3214
+f 3194 3202 3213
+f 3213 3207 3194
+f 3166 3175 3202
+f 3202 3194 3166
+f 3134 3139 3175
+f 3175 3166 3134
+f 3060 3067 3139
+f 3139 3134 3060
+f 2953 2962 3067
+f 3067 3060 2953
+f 2777 2784 2962
+f 2962 2953 2777
+f 2629 2643 2784
+f 2784 2777 2629
+f 2460 2465 2643
+f 2643 2629 2460
+f 2293 2298 2465
+f 2465 2460 2293
+f 1696 1785 2298
+f 2298 2293 1696
+f 3180 3194 3207
+f 3207 3190 3180
+f 3158 3166 3194
+f 3194 3180 3158
+f 3124 3134 3166
+f 3166 3158 3124
+f 3050 3060 3134
+f 3134 3124 3050
+f 2927 2953 3060
+f 3060 3050 2927
+f 2767 2777 2953
+f 2953 2927 2767
+f 2619 2629 2777
+f 2777 2767 2619
+f 2454 2460 2629
+f 2629 2619 2454
+f 2283 2293 2460
+f 2460 2454 2283
+f 1695 1696 2293
+f 2293 2283 1695
+f 3160 3180 3190
+f 3190 3168 3160
+f 3144 3158 3180
+f 3180 3160 3144
+f 3086 3124 3158
+f 3158 3144 3086
+f 3032 3050 3124
+f 3124 3086 3032
+f 2891 2927 3050
+f 3050 3032 2891
+f 2739 2767 2927
+f 2927 2891 2739
+f 2597 2619 2767
+f 2767 2739 2597
+f 2448 2454 2619
+f 2619 2597 2448
+f 2265 2283 2454
+f 2454 2448 2265
+f 1707 1695 2283
+f 2283 2265 1707
+f 3146 3160 3168
+f 3168 3152 3146
+f 3122 3144 3160
+f 3160 3146 3122
+f 3070 3086 3144
+f 3144 3122 3070
+f 2998 3032 3086
+f 3086 3070 2998
+f 2853 2891 3032
+f 3032 2998 2853
+f 2717 2739 2891
+f 2891 2853 2717
+f 2582 2597 2739
+f 2739 2717 2582
+f 2434 2448 2597
+f 2597 2582 2434
+f 2251 2265 2448
+f 2448 2434 2251
+f 1907 1707 2265
+f 2265 2251 1907
+f 3120 3146 3152
+f 3152 3126 3120
+f 3082 3122 3146
+f 3146 3120 3082
+f 3042 3070 3122
+f 3122 3082 3042
+f 2957 2998 3070
+f 3070 3042 2957
+f 2825 2853 2998
+f 2998 2957 2825
+f 2693 2717 2853
+f 2853 2825 2693
+f 2556 2582 2717
+f 2717 2693 2556
+f 2424 2434 2582
+f 2582 2556 2424
+f 2239 2251 2434
+f 2434 2424 2239
+f 1906 1907 2251
+f 2251 2239 1906
+f 3080 3120 3126
+f 3126 3084 3080
+f 3056 3082 3120
+f 3120 3080 3056
+f 3012 3042 3082
+f 3082 3056 3012
+f 2899 2957 3042
+f 3042 3012 2899
+f 2789 2825 2957
+f 2957 2899 2789
+f 2675 2693 2825
+f 2825 2789 2675
+f 2545 2556 2693
+f 2693 2675 2545
+f 2416 2424 2556
+f 2556 2545 2416
+f 2228 2239 2424
+f 2424 2416 2228
+f 1770 1906 2239
+f 2239 2228 1770
+f 3053 3080 3084
+f 3084 3062 3053
+f 3028 3056 3080
+f 3080 3053 3028
+f 2978 3012 3056
+f 3056 3028 2978
+f 2860 2899 3012
+f 3012 2978 2860
+f 2754 2789 2899
+f 2899 2860 2754
+f 2652 2675 2789
+f 2789 2754 2652
+f 2534 2545 2675
+f 2675 2652 2534
+f 2406 2416 2545
+f 2545 2534 2406
+f 2217 2228 2416
+f 2416 2406 2217
+f 1929 1770 2228
+f 2228 2217 1929
+f 3035 3053 3062
+f 3062 3039 3035
+f 2997 3028 3053
+f 3053 3035 2997
+f 2920 2978 3028
+f 3028 2997 2920
+f 2832 2860 2978
+f 2978 2920 2832
+f 2728 2754 2860
+f 2860 2832 2728
+f 2634 2652 2754
+f 2754 2728 2634
+f 2528 2534 2652
+f 2652 2634 2528
+f 2396 2406 2534
+f 2534 2528 2396
+f 2202 2217 2406
+f 2406 2396 2202
+f 1765 1929 2217
+f 2217 2202 1765
+f 3017 3035 3039
+f 3039 3027 3017
+f 2980 2997 3035
+f 3035 3017 2980
+f 2896 2920 2997
+f 2997 2980 2896
+f 2812 2832 2920
+f 2920 2896 2812
+f 2715 2728 2832
+f 2832 2812 2715
+f 2618 2634 2728
+f 2728 2715 2618
+f 2523 2528 2634
+f 2634 2618 2523
+f 2392 2396 2528
+f 2528 2523 2392
+f 2196 2202 2396
+f 2396 2392 2196
+f 1724 1765 2202
+f 2202 2196 1724
+f 3007 3017 3027
+f 3027 3023 3007
+f 2969 2980 3017
+f 3017 3007 2969
+f 2887 2896 2980
+f 2980 2969 2887
+f 2802 2812 2896
+f 2896 2887 2802
+f 2709 2715 2812
+f 2812 2802 2709
+f 2609 2618 2715
+f 2715 2709 2609
+f 2519 2523 2618
+f 2618 2609 2519
+f 2386 2392 2523
+f 2523 2519 2386
+f 2190 2196 2392
+f 2392 2386 2190
+f 1759 1724 2196
+f 2196 2190 1759
+f 1329 1324 1785
+f 1785 1782 1329
+f 1162 1157 1324
+f 1324 1329 1162
+f 993 982 1157
+f 1157 1162 993
+f 845 838 982
+f 982 993 845
+f 669 660 838
+f 838 845 669
+f 542 535 660
+f 660 669 542
+f 490 485 535
+f 535 542 490
+f 438 429 485
+f 485 490 438
+f 404 396 429
+f 429 438 404
+f 387 376 396
+f 396 404 387
+f 1339 1329 1782
+f 1782 1780 1339
+f 1168 1162 1329
+f 1329 1339 1168
+f 1003 993 1162
+f 1162 1168 1003
+f 855 845 993
+f 993 1003 855
+f 695 669 845
+f 845 855 695
+f 559 542 669
+f 669 695 559
+f 500 490 542
+f 542 559 500
+f 446 438 490
+f 490 500 446
+f 416 404 438
+f 438 446 416
+f 408 387 404
+f 404 416 408
+f 1357 1339 1780
+f 1780 1778 1357
+f 1174 1168 1339
+f 1339 1357 1174
+f 1025 1003 1168
+f 1168 1174 1025
+f 883 855 1003
+f 1003 1025 883
+f 731 695 855
+f 855 883 731
+f 583 559 695
+f 695 731 583
+f 516 500 559
+f 559 583 516
+f 467 446 500
+f 500 516 467
+f 444 416 446
+f 446 467 444
+f 436 408 416
+f 416 444 436
+f 1371 1357 1778
+f 1778 1776 1371
+f 1188 1174 1357
+f 1357 1371 1188
+f 1042 1025 1174
+f 1174 1188 1042
+f 905 883 1025
+f 1025 1042 905
+f 769 731 883
+f 883 905 769
+f 624 583 731
+f 731 769 624
+f 532 516 583
+f 583 624 532
+f 502 467 516
+f 516 532 502
+f 459 444 467
+f 467 502 459
+f 452 436 444
+f 444 459 452
+f 1383 1371 1776
+f 1776 1774 1383
+f 1198 1188 1371
+f 1371 1383 1198
+f 1068 1042 1188
+f 1188 1198 1068
+f 929 905 1042
+f 1042 1068 929
+f 797 769 905
+f 905 929 797
+f 665 624 769
+f 769 797 665
+f 569 532 624
+f 624 665 569
+f 520 502 532
+f 532 569 520
+f 504 459 502
+f 502 520 504
+f 498 452 459
+f 459 504 498
+f 1394 1383 1774
+f 1774 1771 1394
+f 1206 1198 1383
+f 1383 1394 1206
+f 1077 1068 1198
+f 1198 1206 1077
+f 947 929 1068
+f 1068 1077 947
+f 833 797 929
+f 929 947 833
+f 723 665 797
+f 797 833 723
+f 610 569 665
+f 665 723 610
+f 549 520 569
+f 569 610 549
+f 522 504 520
+f 520 549 522
+f 518 498 504
+f 504 522 518
+f 1407 1394 1771
+f 1771 1768 1407
+f 1216 1206 1394
+f 1394 1407 1216
+f 1090 1077 1206
+f 1206 1216 1090
+f 972 947 1077
+f 1077 1090 972
+f 870 833 947
+f 947 972 870
+f 764 723 833
+f 833 870 764
+f 646 610 723
+f 723 764 646
+f 587 549 610
+f 610 646 587
+f 556 522 549
+f 549 587 556
+f 540 518 522
+f 522 556 540
+f 1420 1407 1768
+f 1768 1764 1420
+f 1226 1216 1407
+f 1407 1420 1226
+f 1096 1090 1216
+f 1216 1226 1096
+f 990 972 1090
+f 1090 1096 990
+f 896 870 972
+f 972 990 896
+f 792 764 870
+f 870 896 792
+f 704 646 764
+f 764 792 704
+f 627 587 646
+f 646 704 627
+f 582 556 587
+f 587 627 582
+f 574 540 556
+f 556 582 574
+f 1426 1420 1764
+f 1764 1762 1426
+f 1230 1226 1420
+f 1420 1426 1230
+f 1101 1096 1226
+f 1226 1230 1101
+f 1006 990 1096
+f 1096 1101 1006
+f 907 896 990
+f 990 1006 907
+f 812 792 896
+f 896 907 812
+f 728 704 792
+f 792 812 728
+f 644 627 704
+f 704 728 644
+f 607 582 627
+f 627 644 607
+f 592 574 582
+f 582 607 592
+f 1430 1426 1762
+f 1762 1758 1430
+f 1234 1230 1426
+f 1426 1430 1234
+f 1107 1101 1230
+f 1230 1234 1107
+f 1012 1006 1101
+f 1101 1107 1012
+f 912 907 1006
+f 1006 1012 912
+f 819 812 907
+f 907 912 819
+f 738 728 812
+f 812 819 738
+f 651 644 728
+f 728 738 651
+f 618 607 644
+f 644 651 618
+f 601 592 607
+f 607 618 601
+f 405 397 376
+f 376 388 405
+f 439 430 397
+f 397 405 439
+f 491 486 430
+f 430 439 491
+f 543 536 486
+f 486 491 543
+f 670 661 536
+f 536 543 670
+f 846 839 661
+f 661 670 846
+f 994 980 839
+f 839 846 994
+f 1163 1158 980
+f 980 994 1163
+f 1330 1325 1158
+f 1158 1163 1330
+f 1926 1786 1325
+f 1325 1330 1926
+f 417 405 388
+f 388 409 417
+f 447 439 405
+f 405 417 447
+f 501 491 439
+f 439 447 501
+f 560 543 491
+f 491 501 560
+f 696 670 543
+f 543 560 696
+f 856 846 670
+f 670 696 856
+f 1004 994 846
+f 846 856 1004
+f 1169 1163 994
+f 994 1004 1169
+f 1340 1330 1163
+f 1163 1169 1340
+f 1925 1926 1330
+f 1330 1340 1925
+f 445 417 409
+f 409 437 445
+f 468 447 417
+f 417 445 468
+f 517 501 447
+f 447 468 517
+f 584 560 501
+f 501 517 584
+f 732 696 560
+f 560 584 732
+f 884 856 696
+f 696 732 884
+f 1026 1004 856
+f 856 884 1026
+f 1175 1169 1004
+f 1004 1026 1175
+f 1358 1340 1169
+f 1169 1175 1358
+f 1908 1925 1340
+f 1340 1358 1908
+f 460 445 437
+f 437 453 460
+f 503 468 445
+f 445 460 503
+f 533 517 468
+f 468 503 533
+f 625 584 517
+f 517 533 625
+f 770 732 584
+f 584 625 770
+f 906 884 732
+f 732 770 906
+f 1041 1026 884
+f 884 906 1041
+f 1189 1175 1026
+f 1026 1041 1189
+f 1372 1358 1175
+f 1175 1189 1372
+f 1706 1908 1358
+f 1358 1372 1706
+f 505 460 453
+f 453 499 505
+f 521 503 460
+f 460 505 521
+f 570 533 503
+f 503 521 570
+f 666 625 533
+f 533 570 666
+f 798 770 625
+f 625 666 798
+f 930 906 770
+f 770 798 930
+f 1067 1041 906
+f 906 930 1067
+f 1199 1189 1041
+f 1041 1067 1199
+f 1384 1372 1189
+f 1189 1199 1384
+f 1705 1706 1372
+f 1372 1384 1705
+f 523 505 499
+f 499 519 523
+f 550 521 505
+f 505 523 550
+f 611 570 521
+f 521 550 611
+f 724 666 570
+f 570 611 724
+f 834 798 666
+f 666 724 834
+f 948 930 798
+f 798 834 948
+f 1078 1067 930
+f 930 948 1078
+f 1207 1199 1067
+f 1067 1078 1207
+f 1395 1384 1199
+f 1199 1207 1395
+f 1773 1705 1384
+f 1384 1395 1773
+f 555 523 519
+f 519 541 555
+f 588 550 523
+f 523 555 588
+f 645 611 550
+f 550 588 645
+f 763 724 611
+f 611 645 763
+f 869 834 724
+f 724 763 869
+f 971 948 834
+f 834 869 971
+f 1089 1078 948
+f 948 971 1089
+f 1217 1207 1078
+f 1078 1089 1217
+f 1406 1395 1207
+f 1207 1217 1406
+f 1692 1773 1395
+f 1395 1406 1692
+f 581 555 541
+f 541 573 581
+f 626 588 555
+f 555 581 626
+f 703 645 588
+f 588 626 703
+f 791 763 645
+f 645 703 791
+f 895 869 763
+f 763 791 895
+f 989 971 869
+f 869 895 989
+f 1095 1089 971
+f 971 989 1095
+f 1227 1217 1089
+f 1089 1095 1227
+f 1421 1406 1217
+f 1217 1227 1421
+f 1766 1692 1406
+f 1406 1421 1766
+f 606 581 573
+f 573 591 606
+f 643 626 581
+f 581 606 643
+f 727 703 626
+f 626 643 727
+f 811 791 703
+f 703 727 811
+f 908 895 791
+f 791 811 908
+f 1005 989 895
+f 895 908 1005
+f 1100 1095 989
+f 989 1005 1100
+f 1231 1227 1095
+f 1095 1100 1231
+f 1427 1421 1227
+f 1227 1231 1427
+f 1897 1766 1421
+f 1421 1427 1897
+f 615 606 591
+f 591 598 615
+f 653 643 606
+f 606 615 653
+f 735 727 643
+f 643 653 735
+f 820 811 727
+f 727 735 820
+f 913 908 811
+f 811 820 913
+f 1013 1005 908
+f 908 913 1013
+f 1103 1100 1005
+f 1005 1013 1103
+f 1236 1231 1100
+f 1100 1103 1236
+f 1432 1427 1231
+f 1231 1236 1432
+f 1760 1897 1427
+f 1427 1432 1760
+f 2294 2299 1786
+f 1786 1783 2294
+f 2461 2466 2299
+f 2299 2294 2461
+f 2630 2641 2466
+f 2466 2461 2630
+f 2778 2785 2641
+f 2641 2630 2778
+f 2954 2963 2785
+f 2785 2778 2954
+f 3061 3068 2963
+f 2963 2954 3061
+f 3135 3140 3068
+f 3068 3061 3135
+f 3167 3176 3140
+f 3140 3135 3167
+f 3195 3203 3176
+f 3176 3167 3195
+f 3208 3213 3203
+f 3203 3195 3208
+f 2284 2294 1783
+f 1783 1781 2284
+f 2455 2461 2294
+f 2294 2284 2455
+f 2620 2630 2461
+f 2461 2455 2620
+f 2768 2778 2630
+f 2630 2620 2768
+f 2928 2954 2778
+f 2778 2768 2928
+f 3051 3061 2954
+f 2954 2928 3051
+f 3125 3135 3061
+f 3061 3051 3125
+f 3159 3167 3135
+f 3135 3125 3159
+f 3181 3195 3167
+f 3167 3159 3181
+f 3191 3208 3195
+f 3195 3181 3191
+f 2266 2284 1781
+f 1781 1779 2266
+f 2449 2455 2284
+f 2284 2266 2449
+f 2598 2620 2455
+f 2455 2449 2598
+f 2740 2768 2620
+f 2620 2598 2740
+f 2892 2928 2768
+f 2768 2740 2892
+f 3033 3051 2928
+f 2928 2892 3033
+f 3087 3125 3051
+f 3051 3033 3087
+f 3145 3159 3125
+f 3125 3087 3145
+f 3161 3181 3159
+f 3159 3145 3161
+f 3169 3191 3181
+f 3181 3161 3169
+f 2252 2266 1779
+f 1779 1777 2252
+f 2435 2449 2266
+f 2266 2252 2435
+f 2581 2598 2449
+f 2449 2435 2581
+f 2718 2740 2598
+f 2598 2581 2718
+f 2854 2892 2740
+f 2740 2718 2854
+f 2999 3033 2892
+f 2892 2854 2999
+f 3071 3087 3033
+f 3033 2999 3071
+f 3123 3145 3087
+f 3087 3071 3123
+f 3147 3161 3145
+f 3145 3123 3147
+f 3153 3169 3161
+f 3161 3147 3153
+f 2240 2252 1777
+f 1777 1775 2240
+f 2425 2435 2252
+f 2252 2240 2425
+f 2555 2581 2435
+f 2435 2425 2555
+f 2694 2718 2581
+f 2581 2555 2694
+f 2826 2854 2718
+f 2718 2694 2826
+f 2958 2999 2854
+f 2854 2826 2958
+f 3043 3071 2999
+f 2999 2958 3043
+f 3083 3123 3071
+f 3071 3043 3083
+f 3121 3147 3123
+f 3123 3083 3121
+f 3127 3153 3147
+f 3147 3121 3127
+f 2229 2240 1775
+f 1775 1772 2229
+f 2417 2425 2240
+f 2240 2229 2417
+f 2546 2555 2425
+f 2425 2417 2546
+f 2676 2694 2555
+f 2555 2546 2676
+f 2790 2826 2694
+f 2694 2676 2790
+f 2900 2958 2826
+f 2826 2790 2900
+f 3013 3043 2958
+f 2958 2900 3013
+f 3057 3083 3043
+f 3043 3013 3057
+f 3081 3121 3083
+f 3083 3057 3081
+f 3085 3127 3121
+f 3121 3081 3085
+f 2216 2229 1772
+f 1772 1769 2216
+f 2407 2417 2229
+f 2229 2216 2407
+f 2533 2546 2417
+f 2417 2407 2533
+f 2651 2676 2546
+f 2546 2533 2651
+f 2753 2790 2676
+f 2676 2651 2753
+f 2859 2900 2790
+f 2790 2753 2859
+f 2977 3013 2900
+f 2900 2859 2977
+f 3029 3057 3013
+f 3013 2977 3029
+f 3052 3081 3057
+f 3057 3029 3052
+f 3063 3085 3081
+f 3081 3052 3063
+f 2203 2216 1769
+f 1769 1767 2203
+f 2397 2407 2216
+f 2216 2203 2397
+f 2527 2533 2407
+f 2407 2397 2527
+f 2633 2651 2533
+f 2533 2527 2633
+f 2727 2753 2651
+f 2651 2633 2727
+f 2831 2859 2753
+f 2753 2727 2831
+f 2919 2977 2859
+f 2859 2831 2919
+f 2996 3029 2977
+f 2977 2919 2996
+f 3034 3052 3029
+f 3029 2996 3034
+f 3038 3063 3052
+f 3052 3034 3038
+f 2197 2203 1767
+f 1767 1763 2197
+f 2393 2397 2203
+f 2203 2197 2393
+f 2522 2527 2397
+f 2397 2393 2522
+f 2617 2633 2527
+f 2527 2522 2617
+f 2716 2727 2633
+f 2633 2617 2716
+f 2811 2831 2727
+f 2727 2716 2811
+f 2895 2919 2831
+f 2831 2811 2895
+f 2979 2996 2919
+f 2919 2895 2979
+f 3016 3034 2996
+f 2996 2979 3016
+f 3026 3038 3034
+f 3034 3016 3026
+f 2193 2197 1763
+f 1763 1761 2193
+f 2389 2393 2197
+f 2197 2193 2389
+f 2516 2522 2393
+f 2393 2389 2516
+f 2610 2617 2522
+f 2522 2516 2610
+f 2710 2716 2617
+f 2617 2610 2710
+f 2803 2811 2716
+f 2716 2710 2803
+f 2885 2895 2811
+f 2811 2803 2885
+f 2971 2979 2895
+f 2895 2885 2971
+f 3005 3016 2979
+f 2979 2971 3005
+f 3022 3026 3016
+f 3016 3005 3022
+f 461 545 544
+f 544 456 461
+f 463 551 545
+f 545 461 463
+f 465 557 551
+f 551 463 465
+f 469 567 557
+f 557 465 469
+f 471 575 567
+f 567 469 471
+f 473 577 575
+f 575 471 473
+f 475 589 577
+f 577 473 475
+f 477 593 589
+f 589 475 477
+f 479 595 593
+f 593 477 479
+f 481 599 595
+f 595 479 481
+f 389 461 456
+f 456 392 389
+f 386 463 461
+f 461 389 386
+f 379 465 463
+f 463 386 379
+f 373 469 465
+f 465 379 373
+f 371 471 469
+f 469 373 371
+f 369 473 471
+f 471 371 369
+f 366 475 473
+f 473 369 366
+f 364 477 475
+f 475 366 364
+f 362 479 477
+f 477 364 362
+f 361 481 479
+f 479 362 361
+f 335 389 392
+f 392 337 335
+f 333 386 389
+f 389 335 333
+f 331 379 386
+f 386 333 331
+f 329 373 379
+f 379 331 329
+f 328 371 373
+f 373 329 328
+f 325 369 371
+f 371 328 325
+f 323 366 369
+f 369 325 323
+f 321 364 366
+f 366 323 321
+f 319 362 364
+f 364 321 319
+f 316 361 362
+f 362 319 316
+f 298 335 337
+f 337 302 298
+f 290 333 335
+f 335 298 290
+f 288 331 333
+f 333 290 288
+f 286 329 331
+f 331 288 286
+f 281 328 329
+f 329 286 281
+f 275 325 328
+f 328 281 275
+f 265 323 325
+f 325 275 265
+f 259 321 323
+f 323 265 259
+f 255 319 321
+f 321 259 255
+f 249 316 319
+f 319 255 249
+f 269 298 302
+f 302 271 269
+f 261 290 298
+f 298 269 261
+f 251 288 290
+f 290 261 251
+f 238 286 288
+f 288 251 238
+f 230 281 286
+f 286 238 230
+f 218 275 281
+f 281 230 218
+f 208 265 275
+f 275 218 208
+f 196 259 265
+f 265 208 196
+f 186 255 259
+f 259 196 186
+f 181 249 255
+f 255 186 181
+f 228 269 271
+f 271 234 228
+f 222 261 269
+f 269 228 222
+f 212 251 261
+f 261 222 212
+f 200 238 251
+f 251 212 200
+f 177 230 238
+f 238 200 177
+f 160 218 230
+f 230 177 160
+f 134 208 218
+f 218 160 134
+f 112 196 208
+f 208 134 112
+f 102 186 196
+f 196 112 102
+f 96 181 186
+f 186 102 96
+f 198 228 234
+f 234 205 198
+f 182 222 228
+f 228 198 182
+f 168 212 222
+f 222 182 168
+f 146 200 212
+f 212 168 146
+f 118 177 200
+f 200 146 118
+f 92 160 177
+f 177 118 92
+f 74 134 160
+f 160 92 74
+f 63 112 134
+f 134 74 63
+f 53 102 112
+f 112 63 53
+f 50 96 102
+f 102 53 50
+f 167 198 205
+f 205 170 167
+f 154 182 198
+f 198 167 154
+f 126 168 182
+f 182 154 126
+f 100 146 168
+f 168 126 100
+f 83 118 146
+f 146 100 83
+f 61 92 118
+f 118 83 61
+f 46 74 92
+f 92 61 46
+f 32 63 74
+f 74 46 32
+f 25 53 63
+f 63 32 25
+f 21 50 53
+f 53 25 21
+f 143 167 170
+f 170 150 143
+f 124 154 167
+f 167 143 124
+f 104 126 154
+f 154 124 104
+f 84 100 126
+f 126 104 84
+f 65 83 100
+f 100 84 65
+f 44 61 83
+f 83 65 44
+f 30 46 61
+f 61 44 30
+f 17 32 46
+f 46 30 17
+f 9 25 32
+f 32 17 9
+f 5 21 25
+f 25 9 5
+f 132 143 150
+f 150 140 132
+f 116 124 143
+f 143 132 116
+f 94 104 124
+f 124 116 94
+f 76 84 104
+f 104 94 76
+f 55 65 84
+f 84 76 55
+f 40 44 65
+f 65 55 40
+f 22 30 44
+f 44 40 22
+f 11 17 30
+f 30 22 11
+f 2 9 17
+f 17 11 2
+f 1 5 9
+f 9 2 1
+f 480 596 599
+f 599 481 480
+f 478 594 596
+f 596 480 478
+f 476 590 594
+f 594 478 476
+f 474 578 590
+f 590 476 474
+f 472 576 578
+f 578 474 472
+f 470 568 576
+f 576 472 470
+f 466 558 568
+f 568 470 466
+f 464 552 558
+f 558 466 464
+f 462 546 552
+f 552 464 462
+f 456 544 546
+f 546 462 456
+f 363 480 481
+f 481 360 363
+f 365 478 480
+f 480 363 365
+f 367 476 478
+f 478 365 367
+f 368 474 476
+f 476 367 368
+f 370 472 474
+f 474 368 370
+f 372 470 472
+f 472 370 372
+f 380 466 470
+f 470 372 380
+f 385 464 466
+f 466 380 385
+f 390 462 464
+f 464 385 390
+f 391 456 462
+f 462 390 391
+f 320 363 360
+f 360 316 320
+f 322 365 363
+f 363 320 322
+f 324 367 365
+f 365 322 324
+f 326 368 367
+f 367 324 326
+f 327 370 368
+f 368 326 327
+f 330 372 370
+f 370 327 330
+f 332 380 372
+f 372 330 332
+f 334 385 380
+f 380 332 334
+f 336 390 385
+f 385 334 336
+f 337 391 390
+f 390 336 337
+f 256 320 316
+f 316 250 256
+f 260 322 320
+f 320 256 260
+f 266 324 322
+f 322 260 266
+f 276 326 324
+f 324 266 276
+f 282 327 326
+f 326 276 282
+f 287 330 327
+f 327 282 287
+f 289 332 330
+f 330 287 289
+f 291 334 332
+f 332 289 291
+f 299 336 334
+f 334 291 299
+f 303 337 336
+f 336 299 303
+f 187 256 250
+f 250 181 187
+f 197 260 256
+f 256 187 197
+f 209 266 260
+f 260 197 209
+f 219 276 266
+f 266 209 219
+f 231 282 276
+f 276 219 231
+f 239 287 282
+f 282 231 239
+f 252 289 287
+f 287 239 252
+f 262 291 289
+f 289 252 262
+f 270 299 291
+f 291 262 270
+f 272 303 299
+f 299 270 272
+f 103 187 181
+f 181 97 103
+f 113 197 187
+f 187 103 113
+f 135 209 197
+f 197 113 135
+f 161 219 209
+f 209 135 161
+f 178 231 219
+f 219 161 178
+f 201 239 231
+f 231 178 201
+f 213 252 239
+f 239 201 213
+f 223 262 252
+f 252 213 223
+f 229 270 262
+f 262 223 229
+f 235 272 270
+f 270 229 235
+f 54 103 97
+f 97 50 54
+f 64 113 103
+f 103 54 64
+f 75 135 113
+f 113 64 75
+f 93 161 135
+f 135 75 93
+f 119 178 161
+f 161 93 119
+f 147 201 178
+f 178 119 147
+f 169 213 201
+f 201 147 169
+f 183 223 213
+f 213 169 183
+f 199 229 223
+f 223 183 199
+f 205 235 229
+f 229 199 205
+f 24 54 50
+f 50 21 24
+f 33 64 54
+f 54 24 33
+f 47 75 64
+f 64 33 47
+f 62 93 75
+f 75 47 62
+f 82 119 93
+f 93 62 82
+f 101 147 119
+f 119 82 101
+f 127 169 147
+f 147 101 127
+f 155 183 169
+f 169 127 155
+f 166 199 183
+f 183 155 166
+f 171 205 199
+f 199 166 171
+f 10 24 21
+f 21 6 10
+f 18 33 24
+f 24 10 18
+f 31 47 33
+f 33 18 31
+f 45 62 47
+f 47 31 45
+f 66 82 62
+f 62 45 66
+f 85 101 82
+f 82 66 85
+f 105 127 101
+f 101 85 105
+f 125 155 127
+f 127 105 125
+f 144 166 155
+f 155 125 144
+f 151 171 166
+f 166 144 151
+f 3 10 6
+f 6 1 3
+f 12 18 10
+f 10 3 12
+f 23 31 18
+f 18 12 23
+f 41 45 31
+f 31 23 41
+f 56 66 45
+f 45 41 56
+f 77 85 66
+f 66 56 77
+f 95 105 85
+f 85 77 95
+f 117 125 105
+f 105 95 117
+f 133 144 125
+f 125 117 133
+f 140 151 144
+f 144 133 140
+f 138 132 140
+f 140 145 138
+f 122 116 132
+f 132 138 122
+f 98 94 116
+f 116 122 98
+f 80 76 94
+f 94 98 80
+f 60 55 76
+f 76 80 60
+f 42 40 55
+f 55 60 42
+f 28 22 40
+f 40 42 28
+f 13 11 22
+f 22 28 13
+f 7 2 11
+f 11 13 7
+f 4 1 2
+f 2 7 4
+f 152 138 145
+f 145 158 152
+f 136 122 138
+f 138 152 136
+f 108 98 122
+f 122 136 108
+f 89 80 98
+f 98 108 89
+f 70 60 80
+f 80 89 70
+f 52 42 60
+f 60 70 52
+f 38 28 42
+f 42 52 38
+f 26 13 28
+f 28 38 26
+f 19 7 13
+f 13 26 19
+f 15 4 7
+f 7 19 15
+f 173 152 158
+f 158 176 173
+f 162 136 152
+f 152 173 162
+f 142 108 136
+f 136 162 142
+f 111 89 108
+f 108 142 111
+f 91 70 89
+f 89 111 91
+f 73 52 70
+f 70 91 73
+f 58 38 52
+f 52 73 58
+f 48 26 38
+f 38 58 48
+f 37 19 26
+f 26 48 37
+f 35 15 19
+f 19 37 35
+f 194 173 176
+f 176 202 194
+f 184 162 173
+f 173 194 184
+f 174 142 162
+f 162 184 174
+f 156 111 142
+f 142 174 156
+f 128 91 111
+f 111 156 128
+f 106 73 91
+f 91 128 106
+f 86 58 73
+f 73 106 86
+f 78 48 58
+f 58 86 78
+f 68 37 48
+f 48 78 68
+f 67 35 37
+f 37 68 67
+f 221 194 202
+f 202 225 221
+f 216 184 194
+f 194 221 216
+f 206 174 184
+f 184 216 206
+f 192 156 174
+f 174 206 192
+f 180 128 156
+f 156 192 180
+f 164 106 128
+f 128 180 164
+f 148 86 106
+f 106 164 148
+f 130 78 86
+f 86 148 130
+f 121 68 78
+f 78 130 121
+f 115 67 68
+f 68 121 115
+f 244 221 225
+f 225 247 244
+f 240 216 221
+f 221 244 240
+f 236 206 216
+f 216 240 236
+f 233 192 206
+f 206 236 233
+f 227 180 192
+f 192 233 227
+f 215 164 180
+f 180 227 215
+f 210 148 164
+f 164 215 210
+f 203 130 148
+f 148 210 203
+f 191 121 130
+f 130 203 191
+f 188 115 121
+f 121 191 188
+f 284 244 247
+f 247 285 284
+f 279 240 244
+f 244 284 279
+f 277 236 240
+f 240 279 277
+f 273 233 236
+f 236 277 273
+f 267 227 233
+f 233 273 267
+f 263 215 227
+f 227 267 263
+f 258 210 215
+f 215 263 258
+f 253 203 210
+f 210 258 253
+f 245 191 203
+f 203 253 245
+f 242 188 191
+f 191 245 242
+f 315 284 285
+f 285 318 315
+f 312 279 284
+f 284 315 312
+f 311 277 279
+f 279 312 311
+f 309 273 277
+f 277 311 309
+f 307 267 273
+f 273 309 307
+f 305 263 267
+f 267 307 305
+f 301 258 263
+f 263 305 301
+f 297 253 258
+f 258 301 297
+f 295 245 253
+f 253 297 295
+f 293 242 245
+f 245 295 293
+f 341 315 318
+f 318 339 341
+f 343 312 315
+f 315 341 343
+f 345 311 312
+f 312 343 345
+f 347 309 311
+f 311 345 347
+f 349 307 309
+f 309 347 349
+f 351 305 307
+f 307 349 351
+f 353 301 305
+f 305 351 353
+f 355 297 301
+f 301 353 355
+f 357 295 297
+f 297 355 357
+f 359 293 295
+f 295 357 359
+f 378 341 339
+f 339 376 378
+f 384 343 341
+f 341 378 384
+f 394 345 343
+f 343 384 394
+f 403 347 345
+f 345 394 403
+f 406 349 347
+f 347 403 406
+f 415 351 349
+f 349 406 415
+f 419 353 351
+f 351 415 419
+f 423 355 353
+f 353 419 423
+f 425 357 355
+f 355 423 425
+f 427 359 357
+f 357 425 427
+f 8 3 1
+f 1 4 8
+f 14 12 3
+f 3 8 14
+f 29 23 12
+f 12 14 29
+f 43 41 23
+f 23 29 43
+f 59 56 41
+f 41 43 59
+f 81 77 56
+f 56 59 81
+f 99 95 77
+f 77 81 99
+f 123 117 95
+f 95 99 123
+f 139 133 117
+f 117 123 139
+f 145 140 133
+f 133 139 145
+f 20 8 4
+f 4 16 20
+f 27 14 8
+f 8 20 27
+f 39 29 14
+f 14 27 39
+f 51 43 29
+f 29 39 51
+f 71 59 43
+f 43 51 71
+f 88 81 59
+f 59 71 88
+f 109 99 81
+f 81 88 109
+f 137 123 99
+f 99 109 137
+f 153 139 123
+f 123 137 153
+f 159 145 139
+f 139 153 159
+f 36 20 16
+f 16 34 36
+f 49 27 20
+f 20 36 49
+f 57 39 27
+f 27 49 57
+f 72 51 39
+f 39 57 72
+f 90 71 51
+f 51 72 90
+f 110 88 71
+f 71 90 110
+f 141 109 88
+f 88 110 141
+f 163 137 109
+f 109 141 163
+f 172 153 137
+f 137 163 172
+f 176 159 153
+f 153 172 176
+f 69 36 34
+f 34 67 69
+f 79 49 36
+f 36 69 79
+f 87 57 49
+f 49 79 87
+f 107 72 57
+f 57 87 107
+f 129 90 72
+f 72 107 129
+f 157 110 90
+f 90 129 157
+f 175 141 110
+f 110 157 175
+f 185 163 141
+f 141 175 185
+f 195 172 163
+f 163 185 195
+f 202 176 172
+f 172 195 202
+f 120 69 67
+f 67 114 120
+f 131 79 69
+f 69 120 131
+f 149 87 79
+f 79 131 149
+f 165 107 87
+f 87 149 165
+f 179 129 107
+f 107 165 179
+f 193 157 129
+f 129 179 193
+f 207 175 157
+f 157 193 207
+f 217 185 175
+f 175 207 217
+f 220 195 185
+f 185 217 220
+f 224 202 195
+f 195 220 224
+f 190 120 114
+f 114 189 190
+f 204 131 120
+f 120 190 204
+f 211 149 131
+f 131 204 211
+f 214 165 149
+f 149 211 214
+f 226 179 165
+f 165 214 226
+f 232 193 179
+f 179 226 232
+f 237 207 193
+f 193 232 237
+f 241 217 207
+f 207 237 241
+f 243 220 217
+f 217 241 243
+f 248 224 220
+f 220 243 248
+f 246 190 189
+f 189 242 246
+f 254 204 190
+f 190 246 254
+f 257 211 204
+f 204 254 257
+f 264 214 211
+f 211 257 264
+f 268 226 214
+f 214 264 268
+f 274 232 226
+f 226 268 274
+f 278 237 232
+f 232 274 278
+f 280 241 237
+f 237 278 280
+f 283 243 241
+f 241 280 283
+f 285 248 243
+f 243 283 285
+f 294 246 242
+f 242 292 294
+f 296 254 246
+f 246 294 296
+f 300 257 254
+f 254 296 300
+f 304 264 257
+f 257 300 304
+f 306 268 264
+f 264 304 306
+f 308 274 268
+f 268 306 308
+f 310 278 274
+f 274 308 310
+f 313 280 278
+f 278 310 313
+f 314 283 280
+f 280 313 314
+f 317 285 283
+f 283 314 317
+f 356 294 292
+f 292 358 356
+f 354 296 294
+f 294 356 354
+f 352 300 296
+f 296 354 352
+f 350 304 300
+f 300 352 350
+f 348 306 304
+f 304 350 348
+f 346 308 306
+f 306 348 346
+f 344 310 308
+f 308 346 344
+f 342 313 310
+f 310 344 342
+f 340 314 313
+f 313 342 340
+f 338 317 314
+f 314 340 338
+f 424 356 358
+f 358 426 424
+f 422 354 356
+f 356 424 422
+f 418 352 354
+f 354 422 418
+f 414 350 352
+f 352 418 414
+f 407 348 350
+f 350 414 407
+f 402 346 348
+f 348 407 402
+f 393 344 346
+f 346 402 393
+f 383 342 344
+f 344 393 383
+f 377 340 342
+f 342 383 377
+f 375 338 340
+f 340 377 375
+f 3186 3113 3115
+f 3115 3182 3186
+f 3192 3110 3113
+f 3113 3186 3192
+f 3196 3109 3110
+f 3110 3192 3196
+f 3205 3106 3109
+f 3109 3196 3205
+f 3211 3104 3106
+f 3106 3205 3211
+f 3215 3102 3104
+f 3104 3211 3215
+f 3217 3101 3102
+f 3102 3215 3217
+f 3220 3098 3101
+f 3101 3217 3220
+f 3222 3097 3098
+f 3098 3220 3222
+f 3223 3095 3097
+f 3097 3222 3223
+f 3227 3186 3182
+f 3182 3225 3227
+f 3229 3192 3186
+f 3186 3227 3229
+f 3231 3196 3192
+f 3192 3229 3231
+f 3233 3205 3196
+f 3196 3231 3233
+f 3235 3211 3205
+f 3205 3233 3235
+f 3241 3215 3211
+f 3211 3235 3241
+f 3245 3217 3215
+f 3215 3241 3245
+f 3249 3220 3217
+f 3217 3245 3249
+f 3251 3222 3220
+f 3220 3249 3251
+f 3253 3223 3222
+f 3222 3251 3253
+f 3239 3227 3225
+f 3225 3237 3239
+f 3243 3229 3227
+f 3227 3239 3243
+f 3247 3231 3229
+f 3229 3243 3247
+f 3257 3233 3231
+f 3231 3247 3257
+f 3263 3235 3233
+f 3233 3257 3263
+f 3271 3241 3235
+f 3235 3263 3271
+f 3279 3245 3241
+f 3241 3271 3279
+f 3285 3249 3245
+f 3245 3279 3285
+f 3293 3251 3249
+f 3249 3285 3293
+f 3297 3253 3251
+f 3251 3293 3297
+f 3259 3239 3237
+f 3237 3255 3259
+f 3261 3243 3239
+f 3239 3259 3261
+f 3265 3247 3243
+f 3243 3261 3265
+f 3275 3257 3247
+f 3247 3265 3275
+f 3287 3263 3257
+f 3257 3275 3287
+f 3303 3271 3263
+f 3263 3287 3303
+f 3314 3279 3271
+f 3271 3303 3314
+f 3320 3285 3279
+f 3279 3314 3320
+f 3330 3293 3285
+f 3285 3320 3330
+f 3332 3297 3293
+f 3293 3330 3332
+f 3270 3259 3255
+f 3255 3268 3270
+f 3273 3261 3259
+f 3259 3270 3273
+f 3283 3265 3261
+f 3261 3273 3283
+f 3299 3275 3265
+f 3265 3283 3299
+f 3308 3287 3275
+f 3275 3299 3308
+f 3322 3303 3287
+f 3287 3308 3322
+f 3338 3314 3303
+f 3303 3322 3338
+f 3346 3320 3314
+f 3314 3338 3346
+f 3351 3330 3320
+f 3320 3346 3351
+f 3355 3332 3330
+f 3330 3351 3355
+f 3282 3270 3268
+f 3268 3278 3282
+f 3290 3273 3270
+f 3270 3282 3290
+f 3302 3283 3273
+f 3273 3290 3302
+f 3312 3299 3283
+f 3283 3302 3312
+f 3324 3308 3299
+f 3299 3312 3324
+f 3340 3322 3308
+f 3308 3324 3340
+f 3353 3338 3322
+f 3322 3340 3353
+f 3368 3346 3338
+f 3338 3353 3368
+f 3373 3351 3346
+f 3346 3368 3373
+f 3379 3355 3351
+f 3351 3373 3379
+f 3295 3282 3278
+f 3278 3292 3295
+f 3306 3290 3282
+f 3282 3295 3306
+f 3316 3302 3290
+f 3290 3306 3316
+f 3326 3312 3302
+f 3302 3316 3326
+f 3345 3324 3312
+f 3312 3326 3345
+f 3359 3340 3324
+f 3324 3345 3359
+f 3376 3353 3340
+f 3340 3359 3376
+f 3394 3368 3353
+f 3353 3376 3394
+f 3404 3373 3368
+f 3368 3394 3404
+f 3406 3379 3373
+f 3373 3404 3406
+f 3310 3295 3292
+f 3292 3307 3310
+f 3318 3306 3295
+f 3295 3310 3318
+f 3336 3316 3306
+f 3306 3318 3336
+f 3348 3326 3316
+f 3316 3336 3348
+f 3369 3345 3326
+f 3326 3348 3369
+f 3389 3359 3345
+f 3345 3369 3389
+f 3425 3376 3359
+f 3359 3389 3425
+f 3449 3394 3376
+f 3376 3425 3449
+f 3468 3404 3394
+f 3394 3449 3468
+f 3472 3406 3404
+f 3404 3468 3472
+f 3335 3310 3307
+f 3307 3329 3335
+f 3343 3318 3310
+f 3310 3335 3343
+f 3362 3336 3318
+f 3318 3343 3362
+f 3386 3348 3336
+f 3336 3362 3386
+f 3422 3369 3348
+f 3348 3386 3422
+f 3464 3389 3369
+f 3369 3422 3464
+f 3490 3425 3389
+f 3389 3464 3490
+f 3505 3449 3425
+f 3425 3490 3505
+f 3521 3468 3449
+f 3449 3505 3521
+f 3523 3472 3468
+f 3468 3521 3523
+f 3364 3335 3329
+f 3329 3357 3364
+f 3382 3343 3335
+f 3335 3364 3382
+f 3416 3362 3343
+f 3343 3382 3416
+f 3465 3386 3362
+f 3362 3416 3465
+f 3495 3422 3386
+f 3386 3465 3495
+f 3528 3464 3422
+f 3422 3495 3528
+f 3553 3490 3464
+f 3464 3528 3553
+f 3579 3505 3490
+f 3490 3553 3579
+f 3592 3521 3505
+f 3505 3579 3592
+f 3604 3523 3521
+f 3521 3592 3604
+f 3221 3096 3094
+f 3094 3224 3221
+f 3219 3099 3096
+f 3096 3221 3219
+f 3218 3100 3099
+f 3099 3219 3218
+f 3216 3103 3100
+f 3100 3218 3216
+f 3212 3105 3103
+f 3103 3216 3212
+f 3206 3107 3105
+f 3105 3212 3206
+f 3197 3108 3107
+f 3107 3206 3197
+f 3193 3111 3108
+f 3108 3197 3193
+f 3187 3112 3111
+f 3111 3193 3187
+f 3183 3114 3112
+f 3112 3187 3183
+f 3252 3221 3224
+f 3224 3254 3252
+f 3250 3219 3221
+f 3221 3252 3250
+f 3246 3218 3219
+f 3219 3250 3246
+f 3242 3216 3218
+f 3218 3246 3242
+f 3236 3212 3216
+f 3216 3242 3236
+f 3234 3206 3212
+f 3212 3236 3234
+f 3232 3197 3206
+f 3206 3234 3232
+f 3230 3193 3197
+f 3197 3232 3230
+f 3228 3187 3193
+f 3193 3230 3228
+f 3226 3183 3187
+f 3187 3228 3226
+f 3294 3252 3254
+f 3254 3298 3294
+f 3286 3250 3252
+f 3252 3294 3286
+f 3280 3246 3250
+f 3250 3286 3280
+f 3272 3242 3246
+f 3246 3280 3272
+f 3264 3236 3242
+f 3242 3272 3264
+f 3258 3234 3236
+f 3236 3264 3258
+f 3248 3232 3234
+f 3234 3258 3248
+f 3244 3230 3232
+f 3232 3248 3244
+f 3240 3228 3230
+f 3230 3244 3240
+f 3238 3226 3228
+f 3228 3240 3238
+f 3331 3294 3298
+f 3298 3333 3331
+f 3321 3286 3294
+f 3294 3331 3321
+f 3315 3280 3286
+f 3286 3321 3315
+f 3304 3272 3280
+f 3280 3315 3304
+f 3288 3264 3272
+f 3272 3304 3288
+f 3276 3258 3264
+f 3264 3288 3276
+f 3266 3248 3258
+f 3258 3276 3266
+f 3262 3244 3248
+f 3248 3266 3262
+f 3260 3240 3244
+f 3244 3262 3260
+f 3256 3238 3240
+f 3240 3260 3256
+f 3350 3331 3333
+f 3333 3354 3350
+f 3347 3321 3331
+f 3331 3350 3347
+f 3339 3315 3321
+f 3321 3347 3339
+f 3323 3304 3315
+f 3315 3339 3323
+f 3309 3288 3304
+f 3304 3323 3309
+f 3300 3276 3288
+f 3288 3309 3300
+f 3284 3266 3276
+f 3276 3300 3284
+f 3274 3262 3266
+f 3266 3284 3274
+f 3269 3260 3262
+f 3262 3274 3269
+f 3267 3256 3260
+f 3260 3269 3267
+f 3372 3350 3354
+f 3354 3378 3372
+f 3367 3347 3350
+f 3350 3372 3367
+f 3352 3339 3347
+f 3347 3367 3352
+f 3341 3323 3339
+f 3339 3352 3341
+f 3325 3309 3323
+f 3323 3341 3325
+f 3313 3300 3309
+f 3309 3325 3313
+f 3301 3284 3300
+f 3300 3313 3301
+f 3289 3274 3284
+f 3284 3301 3289
+f 3281 3269 3274
+f 3274 3289 3281
+f 3277 3267 3269
+f 3269 3281 3277
+f 3403 3372 3378
+f 3378 3405 3403
+f 3393 3367 3372
+f 3372 3403 3393
+f 3377 3352 3367
+f 3367 3393 3377
+f 3360 3341 3352
+f 3352 3377 3360
+f 3344 3325 3341
+f 3341 3360 3344
+f 3327 3313 3325
+f 3325 3344 3327
+f 3317 3301 3313
+f 3313 3327 3317
+f 3305 3289 3301
+f 3301 3317 3305
+f 3296 3281 3289
+f 3289 3305 3296
+f 3291 3277 3281
+f 3281 3296 3291
+f 3469 3403 3405
+f 3405 3472 3469
+f 3450 3393 3403
+f 3403 3469 3450
+f 3426 3377 3393
+f 3393 3450 3426
+f 3390 3360 3377
+f 3377 3426 3390
+f 3370 3344 3360
+f 3360 3390 3370
+f 3349 3327 3344
+f 3344 3370 3349
+f 3337 3317 3327
+f 3327 3349 3337
+f 3319 3305 3317
+f 3317 3337 3319
+f 3311 3296 3305
+f 3305 3319 3311
+f 3307 3291 3296
+f 3296 3311 3307
+f 3520 3469 3472
+f 3472 3522 3520
+f 3504 3450 3469
+f 3469 3520 3504
+f 3489 3426 3450
+f 3450 3504 3489
+f 3463 3390 3426
+f 3426 3489 3463
+f 3421 3370 3390
+f 3390 3463 3421
+f 3385 3349 3370
+f 3370 3421 3385
+f 3361 3337 3349
+f 3349 3385 3361
+f 3342 3319 3337
+f 3337 3361 3342
+f 3334 3311 3319
+f 3319 3342 3334
+f 3328 3307 3311
+f 3311 3334 3328
+f 3591 3520 3522
+f 3522 3603 3591
+f 3578 3504 3520
+f 3520 3591 3578
+f 3552 3489 3504
+f 3504 3578 3552
+f 3530 3463 3489
+f 3489 3552 3530
+f 3499 3421 3463
+f 3463 3530 3499
+f 3467 3385 3421
+f 3421 3499 3467
+f 3415 3361 3385
+f 3385 3467 3415
+f 3381 3342 3361
+f 3361 3415 3381
+f 3363 3334 3342
+f 3342 3381 3363
+f 3356 3328 3334
+f 3334 3363 3356
+f 3374 3365 3358
+f 3358 3371 3374
+f 3395 3383 3365
+f 3365 3374 3395
+f 3443 3417 3383
+f 3383 3395 3443
+f 3481 3466 3417
+f 3417 3443 3481
+f 3514 3496 3466
+f 3466 3481 3514
+f 3545 3529 3496
+f 3496 3514 3545
+f 3573 3551 3529
+f 3529 3545 3573
+f 3597 3577 3551
+f 3551 3573 3597
+f 3613 3590 3577
+f 3577 3597 3613
+f 3619 3603 3590
+f 3590 3613 3619
+f 3387 3374 3371
+f 3371 3380 3387
+f 3413 3395 3374
+f 3374 3387 3413
+f 3461 3443 3395
+f 3395 3413 3461
+f 3493 3481 3443
+f 3443 3461 3493
+f 3524 3514 3481
+f 3481 3493 3524
+f 3556 3545 3514
+f 3514 3524 3556
+f 3584 3573 3545
+f 3545 3556 3584
+f 3611 3597 3573
+f 3573 3584 3611
+f 3628 3613 3597
+f 3597 3611 3628
+f 3632 3619 3613
+f 3613 3628 3632
+f 3398 3387 3380
+f 3380 3391 3398
+f 3435 3413 3387
+f 3387 3398 3435
+f 3473 3461 3413
+f 3413 3435 3473
+f 3500 3493 3461
+f 3461 3473 3500
+f 3531 3524 3493
+f 3493 3500 3531
+f 3562 3556 3524
+f 3524 3531 3562
+f 3595 3584 3556
+f 3556 3562 3595
+f 3617 3611 3584
+f 3584 3595 3617
+f 3633 3628 3611
+f 3611 3617 3633
+f 3641 3632 3628
+f 3628 3633 3641
+f 3409 3398 3391
+f 3391 3400 3409
+f 3447 3435 3398
+f 3398 3409 3447
+f 3477 3473 3435
+f 3435 3447 3477
+f 3506 3500 3473
+f 3473 3477 3506
+f 3540 3531 3500
+f 3500 3506 3540
+f 3567 3562 3531
+f 3531 3540 3567
+f 3601 3595 3562
+f 3562 3567 3601
+f 3624 3617 3595
+f 3595 3601 3624
+f 3639 3633 3617
+f 3617 3624 3639
+f 3644 3641 3633
+f 3633 3639 3644
+f 3433 3409 3400
+f 3400 3411 3433
+f 3453 3447 3409
+f 3409 3433 3453
+f 3483 3477 3447
+f 3447 3453 3483
+f 3510 3506 3477
+f 3477 3483 3510
+f 3543 3540 3506
+f 3506 3510 3543
+f 3569 3567 3540
+f 3540 3543 3569
+f 3599 3601 3567
+f 3567 3569 3599
+f 3622 3624 3601
+f 3601 3599 3622
+f 3637 3639 3624
+f 3624 3622 3637
+f 3642 3644 3639
+f 3639 3637 3642
+f 3439 3433 3411
+f 3411 3424 3439
+f 3458 3453 3433
+f 3433 3439 3458
+f 3487 3483 3453
+f 3453 3458 3487
+f 3513 3510 3483
+f 3483 3487 3513
+f 3542 3543 3510
+f 3510 3513 3542
+f 3566 3569 3543
+f 3543 3542 3566
+f 3593 3599 3569
+f 3569 3566 3593
+f 3616 3622 3599
+f 3599 3593 3616
+f 3630 3637 3622
+f 3622 3616 3630
+f 3636 3642 3637
+f 3637 3630 3636
+f 3441 3439 3424
+f 3424 3429 3441
+f 3459 3458 3439
+f 3439 3441 3459
+f 3485 3487 3458
+f 3458 3459 3485
+f 3508 3513 3487
+f 3487 3485 3508
+f 3533 3542 3513
+f 3513 3508 3533
+f 3558 3566 3542
+f 3542 3533 3558
+f 3582 3593 3566
+f 3566 3558 3582
+f 3607 3616 3593
+f 3593 3582 3607
+f 3620 3630 3616
+f 3616 3607 3620
+f 3626 3636 3630
+f 3630 3620 3626
+f 3437 3441 3429
+f 3429 3427 3437
+f 3455 3459 3441
+f 3441 3437 3455
+f 3479 3485 3459
+f 3459 3455 3479
+f 3502 3508 3485
+f 3485 3479 3502
+f 3526 3533 3508
+f 3508 3502 3526
+f 3547 3558 3533
+f 3533 3526 3547
+f 3571 3582 3558
+f 3558 3547 3571
+f 3588 3607 3582
+f 3582 3571 3588
+f 3605 3620 3607
+f 3607 3588 3605
+f 3609 3626 3620
+f 3620 3605 3609
+f 3419 3437 3427
+f 3427 3408 3419
+f 3445 3455 3437
+f 3437 3419 3445
+f 3470 3479 3455
+f 3455 3445 3470
+f 3492 3502 3479
+f 3479 3470 3492
+f 3517 3526 3502
+f 3502 3492 3517
+f 3536 3547 3526
+f 3526 3517 3536
+f 3554 3571 3547
+f 3547 3536 3554
+f 3575 3588 3571
+f 3571 3554 3575
+f 3580 3605 3588
+f 3588 3575 3580
+f 3587 3609 3605
+f 3605 3580 3587
+f 3401 3419 3408
+f 3408 3397 3401
+f 3431 3445 3419
+f 3419 3401 3431
+f 3451 3470 3445
+f 3445 3431 3451
+f 3475 3492 3470
+f 3470 3451 3475
+f 3497 3517 3492
+f 3492 3475 3497
+f 3518 3536 3517
+f 3517 3497 3518
+f 3537 3554 3536
+f 3536 3518 3537
+f 3549 3575 3554
+f 3554 3537 3549
+f 3560 3580 3575
+f 3575 3549 3560
+f 3564 3587 3580
+f 3580 3560 3564
+f 3614 3591 3603
+f 3603 3619 3614
+f 3598 3578 3591
+f 3591 3614 3598
+f 3574 3552 3578
+f 3578 3598 3574
+f 3546 3530 3552
+f 3552 3574 3546
+f 3515 3499 3530
+f 3530 3546 3515
+f 3482 3467 3499
+f 3499 3515 3482
+f 3444 3418 3467
+f 3467 3482 3444
+f 3396 3384 3418
+f 3418 3444 3396
+f 3375 3366 3384
+f 3384 3396 3375
+f 3371 3358 3366
+f 3366 3375 3371
+f 3629 3614 3619
+f 3619 3632 3629
+f 3612 3598 3614
+f 3614 3629 3612
+f 3585 3574 3598
+f 3598 3612 3585
+f 3557 3546 3574
+f 3574 3585 3557
+f 3525 3515 3546
+f 3546 3557 3525
+f 3494 3482 3515
+f 3515 3525 3494
+f 3462 3444 3482
+f 3482 3494 3462
+f 3414 3396 3444
+f 3444 3462 3414
+f 3388 3375 3396
+f 3396 3414 3388
+f 3380 3371 3375
+f 3375 3388 3380
+f 3634 3629 3632
+f 3632 3641 3634
+f 3618 3612 3629
+f 3629 3634 3618
+f 3596 3585 3612
+f 3612 3618 3596
+f 3563 3557 3585
+f 3585 3596 3563
+f 3532 3525 3557
+f 3557 3563 3532
+f 3501 3494 3525
+f 3525 3532 3501
+f 3474 3462 3494
+f 3494 3501 3474
+f 3436 3414 3462
+f 3462 3474 3436
+f 3399 3388 3414
+f 3414 3436 3399
+f 3392 3380 3388
+f 3388 3399 3392
+f 3640 3634 3641
+f 3641 3644 3640
+f 3625 3618 3634
+f 3634 3640 3625
+f 3602 3596 3618
+f 3618 3625 3602
+f 3568 3563 3596
+f 3596 3602 3568
+f 3539 3532 3563
+f 3563 3568 3539
+f 3507 3501 3532
+f 3532 3539 3507
+f 3478 3474 3501
+f 3501 3507 3478
+f 3448 3436 3474
+f 3474 3478 3448
+f 3410 3399 3436
+f 3436 3448 3410
+f 3400 3392 3399
+f 3399 3410 3400
+f 3638 3640 3644
+f 3644 3643 3638
+f 3623 3625 3640
+f 3640 3638 3623
+f 3600 3602 3625
+f 3625 3623 3600
+f 3570 3568 3602
+f 3602 3600 3570
+f 3544 3539 3568
+f 3568 3570 3544
+f 3511 3507 3539
+f 3539 3544 3511
+f 3484 3478 3507
+f 3507 3511 3484
+f 3454 3448 3478
+f 3478 3484 3454
+f 3434 3410 3448
+f 3448 3454 3434
+f 3412 3400 3410
+f 3410 3434 3412
+f 3631 3638 3643
+f 3643 3635 3631
+f 3615 3623 3638
+f 3638 3631 3615
+f 3594 3600 3623
+f 3623 3615 3594
+f 3565 3570 3600
+f 3600 3594 3565
+f 3541 3544 3570
+f 3570 3565 3541
+f 3512 3511 3544
+f 3544 3541 3512
+f 3488 3484 3511
+f 3511 3512 3488
+f 3457 3454 3484
+f 3484 3488 3457
+f 3440 3434 3454
+f 3454 3457 3440
+f 3423 3412 3434
+f 3434 3440 3423
+f 3621 3631 3635
+f 3635 3627 3621
+f 3608 3615 3631
+f 3631 3621 3608
+f 3583 3594 3615
+f 3615 3608 3583
+f 3559 3565 3594
+f 3594 3583 3559
+f 3534 3541 3565
+f 3565 3559 3534
+f 3509 3512 3541
+f 3541 3534 3509
+f 3486 3488 3512
+f 3512 3509 3486
+f 3460 3457 3488
+f 3488 3486 3460
+f 3442 3440 3457
+f 3457 3460 3442
+f 3430 3423 3440
+f 3440 3442 3430
+f 3606 3621 3627
+f 3627 3610 3606
+f 3589 3608 3621
+f 3621 3606 3589
+f 3572 3583 3608
+f 3608 3589 3572
+f 3548 3559 3583
+f 3583 3572 3548
+f 3527 3534 3559
+f 3559 3548 3527
+f 3503 3509 3534
+f 3534 3527 3503
+f 3480 3486 3509
+f 3509 3503 3480
+f 3456 3460 3486
+f 3486 3480 3456
+f 3438 3442 3460
+f 3460 3456 3438
+f 3428 3430 3442
+f 3442 3438 3428
+f 3581 3606 3610
+f 3610 3586 3581
+f 3576 3589 3606
+f 3606 3581 3576
+f 3555 3572 3589
+f 3589 3576 3555
+f 3535 3548 3572
+f 3572 3555 3535
+f 3516 3527 3548
+f 3548 3535 3516
+f 3491 3503 3527
+f 3527 3516 3491
+f 3471 3480 3503
+f 3503 3491 3471
+f 3446 3456 3480
+f 3480 3471 3446
+f 3420 3438 3456
+f 3456 3446 3420
+f 3407 3428 3438
+f 3438 3420 3407
+f 3561 3581 3586
+f 3586 3564 3561
+f 3550 3576 3581
+f 3581 3561 3550
+f 3538 3555 3576
+f 3576 3550 3538
+f 3519 3535 3555
+f 3555 3538 3519
+f 3498 3516 3535
+f 3535 3519 3498
+f 3476 3491 3516
+f 3516 3498 3476
+f 3452 3471 3491
+f 3491 3476 3452
+f 3432 3446 3471
+f 3471 3452 3432
+f 3402 3420 3446
+f 3446 3432 3402
+f 3397 3407 3420
+f 3420 3402 3397
+f 1888 2110 2104
+f 1888 2104 2096
+f 1888 2096 2076
+f 1888 2076 2048
+f 1888 2048 2030
+f 1888 2030 2006
+f 1888 2006 1982
+f 1888 1982 1960
+f 1888 1960 1936
+f 1888 1936 1732
+f 2257 2104 2110
+f 2110 2261 2257
+f 2249 2096 2104
+f 2104 2257 2249
+f 2226 2076 2096
+f 2096 2249 2226
+f 2200 2048 2076
+f 2076 2226 2200
+f 2142 2030 2048
+f 2048 2200 2142
+f 2094 2006 2030
+f 2030 2142 2094
+f 2036 1982 2006
+f 2006 2094 2036
+f 1988 1960 1982
+f 1982 2036 1988
+f 1948 1936 1960
+f 1960 1988 1948
+f 1728 1732 1936
+f 1936 1948 1728
+f 2310 2257 2261
+f 2261 2315 2310
+f 2300 2249 2257
+f 2257 2310 2300
+f 2279 2226 2249
+f 2249 2300 2279
+f 2243 2200 2226
+f 2226 2279 2243
+f 2204 2142 2200
+f 2200 2243 2204
+f 2132 2094 2142
+f 2142 2204 2132
+f 2067 2036 2094
+f 2094 2132 2067
+f 2000 1988 2036
+f 2036 2067 2000
+f 1956 1948 1988
+f 1988 2000 1956
+f 1734 1728 1948
+f 1948 1956 1734
+f 2312 2310 2315
+f 2315 2316 2312
+f 2302 2300 2310
+f 2310 2312 2302
+f 2281 2279 2300
+f 2300 2302 2281
+f 2245 2243 2279
+f 2279 2281 2245
+f 2206 2204 2243
+f 2243 2245 2206
+f 2134 2132 2204
+f 2204 2206 2134
+f 2068 2067 2132
+f 2132 2134 2068
+f 2002 2000 2067
+f 2067 2068 2002
+f 1958 1956 2000
+f 2000 2002 1958
+f 1878 1734 1956
+f 1956 1958 1878
+f 2285 2312 2316
+f 2316 2289 2285
+f 2259 2302 2312
+f 2312 2285 2259
+f 2241 2281 2302
+f 2302 2259 2241
+f 2214 2245 2281
+f 2281 2241 2214
+f 2168 2206 2245
+f 2245 2214 2168
+f 2106 2134 2206
+f 2206 2168 2106
+f 2042 2068 2134
+f 2134 2106 2042
+f 1994 2002 2068
+f 2068 2042 1994
+f 1952 1958 2002
+f 2002 1994 1952
+f 1731 1878 1958
+f 1958 1952 1731
+f 2220 2285 2289
+f 2289 2225 2220
+f 2210 2259 2285
+f 2285 2220 2210
+f 2186 2241 2259
+f 2259 2210 2186
+f 2146 2214 2241
+f 2241 2186 2146
+f 2108 2168 2214
+f 2214 2146 2108
+f 2060 2106 2168
+f 2168 2108 2060
+f 2018 2042 2106
+f 2106 2060 2018
+f 1978 1994 2042
+f 2042 2018 1978
+f 1944 1952 1994
+f 1994 1978 1944
+f 1727 1731 1952
+f 1952 1944 1727
+f 2141 2220 2225
+f 2225 2145 2141
+f 2127 2210 2220
+f 2220 2141 2127
+f 2112 2186 2210
+f 2210 2127 2112
+f 2084 2146 2186
+f 2186 2112 2084
+f 2044 2108 2146
+f 2146 2084 2044
+f 2024 2060 2108
+f 2108 2044 2024
+f 1992 2018 2060
+f 2060 2024 1992
+f 1970 1978 2018
+f 2018 1992 1970
+f 1942 1944 1978
+f 1978 1970 1942
+f 1721 1727 1944
+f 1944 1942 1721
+f 2079 2141 2145
+f 2145 2087 2079
+f 2075 2127 2141
+f 2141 2079 2075
+f 2055 2112 2127
+f 2127 2075 2055
+f 2039 2084 2112
+f 2112 2055 2039
+f 2021 2044 2084
+f 2084 2039 2021
+f 1996 2024 2044
+f 2044 2021 1996
+f 1974 1992 2024
+f 2024 1996 1974
+f 1954 1970 1992
+f 1992 1974 1954
+f 1934 1942 1970
+f 1970 1954 1934
+f 1720 1721 1942
+f 1942 1934 1720
+f 2063 2079 2087
+f 2087 2071 2063
+f 2051 2075 2079
+f 2079 2063 2051
+f 2041 2055 2075
+f 2075 2051 2041
+f 2029 2039 2055
+f 2055 2041 2029
+f 2013 2021 2039
+f 2039 2029 2013
+f 1991 1996 2021
+f 2021 2013 1991
+f 1972 1974 1996
+f 1996 1991 1972
+f 1950 1954 1974
+f 1974 1972 1950
+f 1932 1934 1954
+f 1954 1950 1932
+f 1701 1720 1934
+f 1934 1932 1701
+f 2115 2063 2071
+f 2071 2123 2115
+f 2101 2051 2063
+f 2063 2115 2101
+f 2081 2041 2051
+f 2051 2101 2081
+f 2057 2029 2041
+f 2041 2081 2057
+f 2033 2013 2029
+f 2029 2057 2033
+f 2009 1991 2013
+f 2013 2033 2009
+f 1984 1972 1991
+f 1991 2009 1984
+f 1964 1950 1972
+f 1972 1984 1964
+f 1938 1932 1950
+f 1950 1964 1938
+f 1698 1701 1932
+f 1932 1938 1698
+f 1888 1886 1686
+f 1888 1686 1662
+f 1888 1662 1640
+f 1888 1640 1616
+f 1888 1616 1592
+f 1888 1592 1574
+f 1888 1574 1546
+f 1888 1546 1526
+f 1888 1526 1518
+f 1888 1518 1512
+f 1674 1686 1886
+f 1886 1884 1674
+f 1634 1662 1686
+f 1686 1674 1634
+f 1586 1640 1662
+f 1662 1634 1586
+f 1528 1616 1640
+f 1640 1586 1528
+f 1480 1592 1616
+f 1616 1528 1480
+f 1422 1574 1592
+f 1592 1480 1422
+f 1396 1546 1574
+f 1574 1422 1396
+f 1373 1526 1546
+f 1546 1396 1373
+f 1365 1518 1526
+f 1526 1373 1365
+f 1361 1512 1518
+f 1518 1365 1361
+f 1666 1674 1884
+f 1884 1882 1666
+f 1622 1634 1674
+f 1674 1666 1622
+f 1557 1586 1634
+f 1634 1622 1557
+f 1490 1528 1586
+f 1586 1557 1490
+f 1418 1480 1528
+f 1528 1490 1418
+f 1379 1422 1480
+f 1480 1418 1379
+f 1343 1396 1422
+f 1422 1379 1343
+f 1322 1373 1396
+f 1396 1343 1322
+f 1312 1365 1373
+f 1373 1322 1312
+f 1309 1361 1365
+f 1365 1312 1309
+f 1664 1666 1882
+f 1882 1879 1664
+f 1620 1622 1666
+f 1666 1664 1620
+f 1554 1557 1622
+f 1622 1620 1554
+f 1488 1490 1557
+f 1557 1554 1488
+f 1416 1418 1490
+f 1490 1488 1416
+f 1377 1379 1418
+f 1418 1416 1377
+f 1341 1343 1379
+f 1379 1377 1341
+f 1320 1322 1343
+f 1343 1341 1320
+f 1310 1312 1322
+f 1322 1320 1310
+f 1306 1309 1312
+f 1312 1310 1306
+f 1670 1664 1879
+f 1879 1876 1670
+f 1628 1620 1664
+f 1664 1670 1628
+f 1580 1554 1620
+f 1620 1628 1580
+f 1516 1488 1554
+f 1554 1580 1516
+f 1454 1416 1488
+f 1488 1516 1454
+f 1408 1377 1416
+f 1416 1454 1408
+f 1381 1341 1377
+f 1377 1408 1381
+f 1363 1320 1341
+f 1341 1381 1363
+f 1337 1310 1320
+f 1320 1363 1337
+f 1333 1306 1310
+f 1310 1337 1333
+f 1678 1670 1876
+f 1876 1874 1678
+f 1644 1628 1670
+f 1670 1678 1644
+f 1604 1580 1628
+f 1628 1644 1604
+f 1562 1516 1580
+f 1580 1604 1562
+f 1514 1454 1516
+f 1516 1562 1514
+f 1476 1408 1454
+f 1454 1514 1476
+f 1436 1381 1408
+f 1408 1476 1436
+f 1412 1363 1381
+f 1381 1436 1412
+f 1402 1337 1363
+f 1363 1412 1402
+f 1399 1333 1337
+f 1337 1402 1399
+f 1680 1678 1874
+f 1874 1872 1680
+f 1652 1644 1678
+f 1678 1680 1652
+f 1630 1604 1644
+f 1644 1652 1630
+f 1598 1562 1604
+f 1604 1630 1598
+f 1578 1514 1562
+f 1562 1598 1578
+f 1538 1476 1514
+f 1514 1578 1538
+f 1510 1436 1476
+f 1476 1538 1510
+f 1497 1412 1436
+f 1436 1510 1497
+f 1483 1402 1412
+f 1412 1497 1483
+f 1479 1399 1402
+f 1402 1483 1479
+f 1688 1680 1872
+f 1872 1870 1688
+f 1668 1652 1680
+f 1680 1688 1668
+f 1648 1630 1652
+f 1652 1668 1648
+f 1626 1598 1630
+f 1630 1648 1626
+f 1603 1578 1598
+f 1598 1626 1603
+f 1585 1538 1578
+f 1578 1603 1585
+f 1569 1510 1538
+f 1538 1585 1569
+f 1549 1497 1510
+f 1510 1569 1549
+f 1545 1483 1497
+f 1497 1549 1545
+f 1537 1479 1483
+f 1483 1545 1537
+f 1690 1688 1870
+f 1870 1868 1690
+f 1672 1668 1688
+f 1688 1690 1672
+f 1650 1648 1668
+f 1668 1672 1650
+f 1633 1626 1648
+f 1648 1650 1633
+f 1611 1603 1626
+f 1626 1633 1611
+f 1595 1585 1603
+f 1603 1611 1595
+f 1583 1569 1585
+f 1585 1595 1583
+f 1573 1549 1569
+f 1569 1583 1573
+f 1561 1545 1549
+f 1549 1573 1561
+f 1553 1537 1545
+f 1545 1561 1553
+f 1684 1690 1868
+f 1868 1865 1684
+f 1658 1672 1690
+f 1690 1684 1658
+f 1638 1650 1672
+f 1672 1658 1638
+f 1615 1633 1650
+f 1650 1638 1615
+f 1591 1611 1633
+f 1633 1615 1591
+f 1567 1595 1611
+f 1611 1591 1567
+f 1543 1583 1595
+f 1595 1567 1543
+f 1523 1573 1583
+f 1583 1543 1523
+f 1509 1561 1573
+f 1573 1523 1509
+f 1501 1553 1561
+f 1561 1509 1501
+f 1888 1513 1519
+f 1888 1519 1527
+f 1888 1527 1547
+f 1888 1547 1575
+f 1888 1575 1593
+f 1888 1593 1617
+f 1888 1617 1641
+f 1888 1641 1663
+f 1888 1663 1687
+f 1888 1687 1894
+f 1366 1519 1513
+f 1513 1362 1366
+f 1374 1527 1519
+f 1519 1366 1374
+f 1397 1547 1527
+f 1527 1374 1397
+f 1423 1575 1547
+f 1547 1397 1423
+f 1481 1593 1575
+f 1575 1423 1481
+f 1529 1617 1593
+f 1593 1481 1529
+f 1587 1641 1617
+f 1617 1529 1587
+f 1635 1663 1641
+f 1641 1587 1635
+f 1675 1687 1663
+f 1663 1635 1675
+f 1895 1894 1687
+f 1687 1675 1895
+f 1313 1366 1362
+f 1362 1308 1313
+f 1323 1374 1366
+f 1366 1313 1323
+f 1344 1397 1374
+f 1374 1323 1344
+f 1380 1423 1397
+f 1397 1344 1380
+f 1419 1481 1423
+f 1423 1380 1419
+f 1491 1529 1481
+f 1481 1419 1491
+f 1556 1587 1529
+f 1529 1491 1556
+f 1623 1635 1587
+f 1587 1556 1623
+f 1667 1675 1635
+f 1635 1623 1667
+f 1890 1895 1675
+f 1675 1667 1890
+f 1311 1313 1308
+f 1308 1307 1311
+f 1321 1323 1313
+f 1313 1311 1321
+f 1342 1344 1323
+f 1323 1321 1342
+f 1378 1380 1344
+f 1344 1342 1378
+f 1417 1419 1380
+f 1380 1378 1417
+f 1489 1491 1419
+f 1419 1417 1489
+f 1555 1556 1491
+f 1491 1489 1555
+f 1621 1623 1556
+f 1556 1555 1621
+f 1665 1667 1623
+f 1623 1621 1665
+f 1881 1890 1667
+f 1667 1665 1881
+f 1338 1311 1307
+f 1307 1334 1338
+f 1364 1321 1311
+f 1311 1338 1364
+f 1382 1342 1321
+f 1321 1364 1382
+f 1409 1378 1342
+f 1342 1382 1409
+f 1455 1417 1378
+f 1378 1409 1455
+f 1517 1489 1417
+f 1417 1455 1517
+f 1581 1555 1489
+f 1489 1517 1581
+f 1629 1621 1555
+f 1555 1581 1629
+f 1671 1665 1621
+f 1621 1629 1671
+f 1893 1881 1665
+f 1665 1671 1893
+f 1403 1338 1334
+f 1334 1398 1403
+f 1413 1364 1338
+f 1338 1403 1413
+f 1437 1382 1364
+f 1364 1413 1437
+f 1477 1409 1382
+f 1382 1437 1477
+f 1515 1455 1409
+f 1409 1477 1515
+f 1563 1517 1455
+f 1455 1515 1563
+f 1605 1581 1517
+f 1517 1563 1605
+f 1645 1629 1581
+f 1581 1605 1645
+f 1679 1671 1629
+f 1629 1645 1679
+f 1900 1893 1671
+f 1671 1679 1900
+f 1482 1403 1398
+f 1398 1478 1482
+f 1496 1413 1403
+f 1403 1482 1496
+f 1511 1437 1413
+f 1413 1496 1511
+f 1539 1477 1437
+f 1437 1511 1539
+f 1579 1515 1477
+f 1477 1539 1579
+f 1599 1563 1515
+f 1515 1579 1599
+f 1631 1605 1563
+f 1563 1599 1631
+f 1653 1645 1605
+f 1605 1631 1653
+f 1681 1679 1645
+f 1645 1653 1681
+f 1902 1900 1679
+f 1679 1681 1902
+f 1544 1482 1478
+f 1478 1536 1544
+f 1548 1496 1482
+f 1482 1544 1548
+f 1568 1511 1496
+f 1496 1548 1568
+f 1584 1539 1511
+f 1511 1568 1584
+f 1602 1579 1539
+f 1539 1584 1602
+f 1627 1599 1579
+f 1579 1602 1627
+f 1649 1631 1599
+f 1599 1627 1649
+f 1669 1653 1631
+f 1631 1649 1669
+f 1689 1681 1653
+f 1653 1669 1689
+f 1921 1902 1681
+f 1681 1689 1921
+f 1560 1544 1536
+f 1536 1552 1560
+f 1572 1548 1544
+f 1544 1560 1572
+f 1582 1568 1548
+f 1548 1572 1582
+f 1594 1584 1568
+f 1568 1582 1594
+f 1610 1602 1584
+f 1584 1594 1610
+f 1632 1627 1602
+f 1602 1610 1632
+f 1651 1649 1627
+f 1627 1632 1651
+f 1673 1669 1649
+f 1649 1651 1673
+f 1691 1689 1669
+f 1669 1673 1691
+f 1922 1921 1689
+f 1689 1691 1922
+f 1508 1560 1552
+f 1552 1500 1508
+f 1522 1572 1560
+f 1560 1508 1522
+f 1542 1582 1572
+f 1572 1522 1542
+f 1566 1594 1582
+f 1582 1542 1566
+f 1590 1610 1594
+f 1594 1566 1590
+f 1614 1632 1610
+f 1610 1590 1614
+f 1639 1651 1632
+f 1632 1614 1639
+f 1659 1673 1651
+f 1651 1639 1659
+f 1685 1691 1673
+f 1673 1659 1685
+f 1928 1922 1691
+f 1691 1685 1928
+f 1888 1887 1937
+f 1888 1937 1961
+f 1888 1961 1983
+f 1888 1983 2007
+f 1888 2007 2031
+f 1888 2031 2049
+f 1888 2049 2077
+f 1888 2077 2097
+f 1888 2097 2105
+f 1888 2105 2111
+f 1949 1937 1887
+f 1887 1885 1949
+f 1989 1961 1937
+f 1937 1949 1989
+f 2037 1983 1961
+f 1961 1989 2037
+f 2095 2007 1983
+f 1983 2037 2095
+f 2143 2031 2007
+f 2007 2095 2143
+f 2201 2049 2031
+f 2031 2143 2201
+f 2227 2077 2049
+f 2049 2201 2227
+f 2250 2097 2077
+f 2077 2227 2250
+f 2258 2105 2097
+f 2097 2250 2258
+f 2262 2111 2105
+f 2105 2258 2262
+f 1957 1949 1885
+f 1885 1883 1957
+f 2001 1989 1949
+f 1949 1957 2001
+f 2066 2037 1989
+f 1989 2001 2066
+f 2133 2095 2037
+f 2037 2066 2133
+f 2205 2143 2095
+f 2095 2133 2205
+f 2244 2201 2143
+f 2143 2205 2244
+f 2280 2227 2201
+f 2201 2244 2280
+f 2301 2250 2227
+f 2227 2280 2301
+f 2311 2258 2250
+f 2250 2301 2311
+f 2314 2262 2258
+f 2258 2311 2314
+f 1959 1957 1883
+f 1883 1880 1959
+f 2003 2001 1957
+f 1957 1959 2003
+f 2069 2066 2001
+f 2001 2003 2069
+f 2135 2133 2066
+f 2066 2069 2135
+f 2207 2205 2133
+f 2133 2135 2207
+f 2246 2244 2205
+f 2205 2207 2246
+f 2282 2280 2244
+f 2244 2246 2282
+f 2303 2301 2280
+f 2280 2282 2303
+f 2313 2311 2301
+f 2301 2303 2313
+f 2317 2314 2311
+f 2311 2313 2317
+f 1953 1959 1880
+f 1880 1877 1953
+f 1995 2003 1959
+f 1959 1953 1995
+f 2043 2069 2003
+f 2003 1995 2043
+f 2107 2135 2069
+f 2069 2043 2107
+f 2169 2207 2135
+f 2135 2107 2169
+f 2215 2246 2207
+f 2207 2169 2215
+f 2242 2282 2246
+f 2246 2215 2242
+f 2260 2303 2282
+f 2282 2242 2260
+f 2286 2313 2303
+f 2303 2260 2286
+f 2290 2317 2313
+f 2313 2286 2290
+f 1945 1953 1877
+f 1877 1875 1945
+f 1979 1995 1953
+f 1953 1945 1979
+f 2019 2043 1995
+f 1995 1979 2019
+f 2061 2107 2043
+f 2043 2019 2061
+f 2109 2169 2107
+f 2107 2061 2109
+f 2147 2215 2169
+f 2169 2109 2147
+f 2187 2242 2215
+f 2215 2147 2187
+f 2211 2260 2242
+f 2242 2187 2211
+f 2221 2286 2260
+f 2260 2211 2221
+f 2224 2290 2286
+f 2286 2221 2224
+f 1943 1945 1875
+f 1875 1873 1943
+f 1971 1979 1945
+f 1945 1943 1971
+f 1993 2019 1979
+f 1979 1971 1993
+f 2025 2061 2019
+f 2019 1993 2025
+f 2045 2109 2061
+f 2061 2025 2045
+f 2085 2147 2109
+f 2109 2045 2085
+f 2113 2187 2147
+f 2147 2085 2113
+f 2126 2211 2187
+f 2187 2113 2126
+f 2140 2221 2211
+f 2211 2126 2140
+f 2144 2224 2221
+f 2221 2140 2144
+f 1935 1943 1873
+f 1873 1871 1935
+f 1955 1971 1943
+f 1943 1935 1955
+f 1975 1993 1971
+f 1971 1955 1975
+f 1997 2025 1993
+f 1993 1975 1997
+f 2020 2045 2025
+f 2025 1997 2020
+f 2038 2085 2045
+f 2045 2020 2038
+f 2054 2113 2085
+f 2085 2038 2054
+f 2074 2126 2113
+f 2113 2054 2074
+f 2078 2140 2126
+f 2126 2074 2078
+f 2086 2144 2140
+f 2140 2078 2086
+f 1933 1935 1871
+f 1871 1869 1933
+f 1951 1955 1935
+f 1935 1933 1951
+f 1973 1975 1955
+f 1955 1951 1973
+f 1990 1997 1975
+f 1975 1973 1990
+f 2012 2020 1997
+f 1997 1990 2012
+f 2028 2038 2020
+f 2020 2012 2028
+f 2040 2054 2038
+f 2038 2028 2040
+f 2050 2074 2054
+f 2054 2040 2050
+f 2062 2078 2074
+f 2074 2050 2062
+f 2070 2086 2078
+f 2078 2062 2070
+f 1939 1933 1869
+f 1869 1866 1939
+f 1965 1951 1933
+f 1933 1939 1965
+f 1985 1973 1951
+f 1951 1965 1985
+f 2008 1990 1973
+f 1973 1985 2008
+f 2032 2012 1990
+f 1990 2008 2032
+f 2056 2028 2012
+f 2012 2032 2056
+f 2080 2040 2028
+f 2028 2056 2080
+f 2100 2050 2040
+f 2040 2080 2100
+f 2114 2062 2050
+f 2050 2100 2114
+f 2122 2070 2062
+f 2062 2114 2122
+f 2232 2116 2124
+f 2124 2236 2232
+f 2218 2102 2116
+f 2116 2232 2218
+f 2199 2082 2102
+f 2102 2218 2199
+f 2150 2058 2082
+f 2082 2199 2150
+f 2120 2034 2058
+f 2058 2150 2120
+f 2064 2010 2034
+f 2034 2120 2064
+f 2023 1986 2010
+f 2010 2064 2023
+f 1980 1966 1986
+f 1986 2023 1980
+f 1946 1940 1966
+f 1966 1980 1946
+f 1862 1730 1940
+f 1940 1946 1862
+f 2332 2232 2236
+f 2236 2336 2332
+f 2322 2218 2232
+f 2232 2332 2322
+f 2306 2199 2218
+f 2218 2322 2306
+f 2275 2150 2199
+f 2199 2306 2275
+f 2234 2120 2150
+f 2150 2275 2234
+f 2170 2064 2120
+f 2120 2234 2170
+f 2093 2023 2064
+f 2064 2170 2093
+f 2016 1980 2023
+f 2023 2093 2016
+f 1968 1946 1980
+f 1980 2016 1968
+f 1858 1862 1946
+f 1946 1968 1858
+f 2409 2332 2336
+f 2336 2413 2409
+f 2400 2322 2332
+f 2332 2409 2400
+f 2376 2306 2322
+f 2322 2400 2376
+f 2349 2275 2306
+f 2306 2376 2349
+f 2324 2234 2275
+f 2275 2349 2324
+f 2271 2170 2234
+f 2234 2324 2271
+f 2185 2093 2170
+f 2170 2271 2185
+f 2072 2016 2093
+f 2093 2185 2072
+f 1976 1968 2016
+f 2016 2072 1976
+f 1729 1858 1968
+f 1968 1976 1729
+f 2488 2409 2413
+f 2413 2498 2488
+f 2470 2400 2409
+f 2409 2488 2470
+f 2444 2376 2400
+f 2400 2470 2444
+f 2418 2349 2376
+f 2376 2444 2418
+f 2384 2324 2349
+f 2349 2418 2384
+f 2338 2271 2324
+f 2324 2384 2338
+f 2269 2185 2271
+f 2271 2338 2269
+f 2138 2072 2185
+f 2185 2269 2138
+f 1998 1976 2072
+f 2072 2138 1998
+f 1722 1729 1976
+f 1976 1998 1722
+f 2559 2488 2498
+f 2498 2569 2559
+f 2549 2470 2488
+f 2488 2559 2549
+f 2531 2444 2470
+f 2470 2549 2531
+f 2492 2418 2444
+f 2444 2531 2492
+f 2436 2384 2418
+f 2418 2492 2436
+f 2394 2338 2384
+f 2384 2436 2394
+f 2326 2269 2338
+f 2338 2394 2326
+f 2212 2138 2269
+f 2269 2326 2212
+f 2026 1998 2138
+f 2138 2212 2026
+f 1850 1722 1998
+f 1998 2026 1850
+f 2653 2559 2569
+f 2569 2655 2653
+f 2631 2549 2559
+f 2559 2653 2631
+f 2593 2531 2549
+f 2549 2631 2593
+f 2551 2492 2531
+f 2531 2593 2551
+f 2510 2436 2492
+f 2492 2551 2510
+f 2432 2394 2436
+f 2436 2510 2432
+f 2366 2326 2394
+f 2394 2432 2366
+f 2263 2212 2326
+f 2326 2366 2263
+f 2052 2026 2212
+f 2212 2263 2052
+f 1726 1850 2026
+f 2026 2052 1726
+f 2720 2653 2655
+f 2655 2726 2720
+f 2697 2631 2653
+f 2653 2720 2697
+f 2662 2593 2631
+f 2631 2697 2662
+f 2607 2551 2593
+f 2593 2662 2607
+f 2547 2510 2551
+f 2551 2607 2547
+f 2484 2432 2510
+f 2510 2547 2484
+f 2405 2366 2432
+f 2432 2484 2405
+f 2308 2263 2366
+f 2366 2405 2308
+f 2090 2052 2263
+f 2263 2308 2090
+f 1719 1726 2052
+f 2052 2090 1719
+f 2787 2720 2726
+f 2726 2795 2787
+f 2759 2697 2720
+f 2720 2787 2759
+f 2713 2662 2697
+f 2697 2759 2713
+f 2657 2607 2662
+f 2662 2713 2657
+f 2589 2547 2607
+f 2607 2657 2589
+f 2525 2484 2547
+f 2547 2589 2525
+f 2422 2405 2484
+f 2484 2525 2422
+f 2330 2308 2405
+f 2405 2422 2330
+f 2118 2090 2308
+f 2308 2330 2118
+f 1700 1719 2090
+f 2090 2118 1700
+f 2834 2787 2795
+f 2795 2844 2834
+f 2798 2759 2787
+f 2787 2834 2798
+f 2750 2713 2759
+f 2759 2798 2750
+f 2690 2657 2713
+f 2713 2750 2690
+f 2624 2589 2657
+f 2657 2690 2624
+f 2536 2525 2589
+f 2589 2624 2536
+f 2441 2422 2525
+f 2525 2536 2441
+f 2340 2330 2422
+f 2422 2441 2340
+f 2128 2118 2330
+f 2330 2340 2128
+f 1825 1700 2118
+f 2118 2128 1825
+f 2847 2834 2844
+f 2844 2857 2847
+f 2821 2798 2834
+f 2834 2847 2821
+f 2765 2750 2798
+f 2798 2821 2765
+f 2703 2690 2750
+f 2750 2765 2703
+f 2637 2624 2690
+f 2690 2703 2637
+f 2543 2536 2624
+f 2624 2637 2543
+f 2446 2441 2536
+f 2536 2543 2446
+f 2344 2340 2441
+f 2441 2446 2344
+f 2136 2128 2340
+f 2340 2344 2136
+f 1713 1825 2128
+f 2128 2136 1713
+f 1676 1682 1864
+f 1864 1862 1676
+f 1642 1656 1682
+f 1682 1676 1642
+f 1601 1636 1656
+f 1656 1642 1601
+f 1558 1612 1636
+f 1636 1601 1558
+f 1502 1588 1612
+f 1612 1558 1502
+f 1472 1564 1588
+f 1588 1502 1472
+f 1425 1540 1564
+f 1564 1472 1425
+f 1404 1520 1540
+f 1540 1425 1404
+f 1390 1506 1520
+f 1520 1404 1390
+f 1387 1498 1506
+f 1506 1390 1387
+f 1654 1676 1862
+f 1862 1859 1654
+f 1606 1642 1676
+f 1676 1654 1606
+f 1531 1601 1642
+f 1642 1606 1531
+f 1452 1558 1601
+f 1601 1531 1452
+f 1388 1502 1558
+f 1558 1452 1388
+f 1347 1472 1502
+f 1502 1388 1347
+f 1316 1425 1472
+f 1472 1347 1316
+f 1300 1404 1425
+f 1425 1316 1300
+f 1290 1390 1404
+f 1404 1300 1290
+f 1286 1387 1390
+f 1390 1290 1286
+f 1646 1654 1859
+f 1859 1856 1646
+f 1550 1606 1654
+f 1654 1646 1550
+f 1439 1531 1606
+f 1606 1550 1439
+f 1351 1452 1531
+f 1531 1439 1351
+f 1298 1388 1452
+f 1452 1351 1298
+f 1275 1347 1388
+f 1388 1298 1275
+f 1246 1316 1347
+f 1347 1275 1246
+f 1222 1300 1316
+f 1316 1246 1222
+f 1215 1290 1300
+f 1300 1222 1215
+f 1211 1286 1290
+f 1290 1215 1211
+f 1624 1646 1856
+f 1856 1854 1624
+f 1484 1550 1646
+f 1646 1624 1484
+f 1353 1439 1550
+f 1550 1484 1353
+f 1284 1351 1439
+f 1439 1353 1284
+f 1238 1298 1351
+f 1351 1284 1238
+f 1204 1275 1298
+f 1298 1238 1204
+f 1178 1246 1275
+f 1275 1204 1178
+f 1152 1222 1246
+f 1246 1178 1152
+f 1134 1215 1222
+f 1222 1152 1134
+f 1124 1211 1215
+f 1215 1134 1124
+f 1596 1624 1854
+f 1854 1851 1596
+f 1410 1484 1624
+f 1624 1596 1410
+f 1296 1353 1484
+f 1484 1410 1296
+f 1228 1284 1353
+f 1353 1296 1228
+f 1186 1238 1284
+f 1284 1228 1186
+f 1130 1204 1238
+f 1238 1186 1130
+f 1091 1178 1204
+f 1204 1130 1091
+f 1073 1152 1178
+f 1178 1091 1073
+f 1063 1134 1152
+f 1152 1073 1063
+f 1053 1124 1134
+f 1134 1063 1053
+f 1570 1596 1851
+f 1851 1848 1570
+f 1359 1410 1596
+f 1596 1570 1359
+f 1256 1296 1410
+f 1410 1359 1256
+f 1190 1228 1296
+f 1296 1256 1190
+f 1112 1186 1228
+f 1228 1190 1112
+f 1071 1130 1186
+f 1186 1112 1071
+f 1029 1091 1130
+f 1130 1071 1029
+f 991 1073 1091
+f 1091 1029 991
+f 969 1063 1073
+f 1073 991 969
+f 967 1053 1063
+f 1063 969 967
+f 1532 1570 1848
+f 1848 1846 1532
+f 1314 1359 1570
+f 1570 1532 1314
+f 1219 1256 1359
+f 1359 1314 1219
+f 1138 1190 1256
+f 1256 1219 1138
+f 1075 1112 1190
+f 1190 1138 1075
+f 1015 1071 1112
+f 1112 1075 1015
+f 962 1029 1071
+f 1071 1015 962
+f 925 991 1029
+f 1029 962 925
+f 904 969 991
+f 991 925 904
+f 898 967 969
+f 969 904 898
+f 1504 1532 1846
+f 1846 1832 1504
+f 1292 1314 1532
+f 1532 1504 1292
+f 1200 1219 1314
+f 1314 1292 1200
+f 1097 1138 1219
+f 1219 1200 1097
+f 1033 1075 1138
+f 1138 1097 1033
+f 965 1015 1075
+f 1075 1033 965
+f 909 962 1015
+f 1015 965 909
+f 863 925 962
+f 962 909 863
+f 835 904 925
+f 925 863 835
+f 827 898 904
+f 904 835 827
+f 1494 1504 1832
+f 1832 1824 1494
+f 1282 1292 1504
+f 1504 1494 1282
+f 1183 1200 1292
+f 1292 1282 1183
+f 1088 1097 1200
+f 1200 1183 1088
+f 1000 1033 1097
+f 1097 1088 1000
+f 934 965 1033
+f 1033 1000 934
+f 874 909 965
+f 965 934 874
+f 826 863 909
+f 909 874 826
+f 790 835 863
+f 863 826 790
+f 780 827 835
+f 835 790 780
+f 1486 1494 1824
+f 1824 1814 1486
+f 1278 1282 1494
+f 1494 1486 1278
+f 1176 1183 1282
+f 1282 1278 1176
+f 1079 1088 1183
+f 1183 1176 1079
+f 985 1000 1088
+f 1088 1079 985
+f 919 934 1000
+f 1000 985 919
+f 857 874 934
+f 934 919 857
+f 801 826 874
+f 874 857 801
+f 775 790 826
+f 826 801 775
+f 765 780 790
+f 790 775 765
+f 1391 1507 1499
+f 1499 1387 1391
+f 1405 1521 1507
+f 1507 1391 1405
+f 1424 1541 1521
+f 1521 1405 1424
+f 1473 1565 1541
+f 1541 1424 1473
+f 1503 1589 1565
+f 1565 1473 1503
+f 1559 1613 1589
+f 1589 1503 1559
+f 1600 1637 1613
+f 1613 1559 1600
+f 1643 1657 1637
+f 1637 1600 1643
+f 1677 1683 1657
+f 1657 1643 1677
+f 1863 1892 1683
+f 1683 1677 1863
+f 1291 1391 1387
+f 1387 1287 1291
+f 1301 1405 1391
+f 1391 1291 1301
+f 1317 1424 1405
+f 1405 1301 1317
+f 1348 1473 1424
+f 1424 1317 1348
+f 1389 1503 1473
+f 1473 1348 1389
+f 1453 1559 1503
+f 1503 1389 1453
+f 1530 1600 1559
+f 1559 1453 1530
+f 1607 1643 1600
+f 1600 1530 1607
+f 1655 1677 1643
+f 1643 1607 1655
+f 1861 1863 1677
+f 1677 1655 1861
+f 1214 1291 1287
+f 1287 1210 1214
+f 1223 1301 1291
+f 1291 1214 1223
+f 1247 1317 1301
+f 1301 1223 1247
+f 1274 1348 1317
+f 1317 1247 1274
+f 1299 1389 1348
+f 1348 1274 1299
+f 1352 1453 1389
+f 1389 1299 1352
+f 1438 1530 1453
+f 1453 1352 1438
+f 1551 1607 1530
+f 1530 1438 1551
+f 1647 1655 1607
+f 1607 1551 1647
+f 1891 1861 1655
+f 1655 1647 1891
+f 1135 1214 1210
+f 1210 1125 1135
+f 1153 1223 1214
+f 1214 1135 1153
+f 1179 1247 1223
+f 1223 1153 1179
+f 1205 1274 1247
+f 1247 1179 1205
+f 1239 1299 1274
+f 1274 1205 1239
+f 1285 1352 1299
+f 1299 1239 1285
+f 1354 1438 1352
+f 1352 1285 1354
+f 1485 1551 1438
+f 1438 1354 1485
+f 1625 1647 1551
+f 1551 1485 1625
+f 1901 1891 1647
+f 1647 1625 1901
+f 1064 1135 1125
+f 1125 1054 1064
+f 1074 1153 1135
+f 1135 1064 1074
+f 1092 1179 1153
+f 1153 1074 1092
+f 1131 1205 1179
+f 1179 1092 1131
+f 1187 1239 1205
+f 1205 1131 1187
+f 1229 1285 1239
+f 1239 1187 1229
+f 1297 1354 1285
+f 1285 1229 1297
+f 1411 1485 1354
+f 1354 1297 1411
+f 1597 1625 1485
+f 1485 1411 1597
+f 1853 1901 1625
+f 1625 1597 1853
+f 970 1064 1054
+f 1054 968 970
+f 992 1074 1064
+f 1064 970 992
+f 1030 1092 1074
+f 1074 992 1030
+f 1072 1131 1092
+f 1092 1030 1072
+f 1113 1187 1131
+f 1131 1072 1113
+f 1191 1229 1187
+f 1187 1113 1191
+f 1257 1297 1229
+f 1229 1191 1257
+f 1360 1411 1297
+f 1297 1257 1360
+f 1571 1597 1411
+f 1411 1360 1571
+f 1899 1853 1597
+f 1597 1571 1899
+f 903 970 968
+f 968 897 903
+f 926 992 970
+f 970 903 926
+f 961 1030 992
+f 992 926 961
+f 1016 1072 1030
+f 1030 961 1016
+f 1076 1113 1072
+f 1072 1016 1076
+f 1139 1191 1113
+f 1113 1076 1139
+f 1218 1257 1191
+f 1191 1139 1218
+f 1315 1360 1257
+f 1257 1218 1315
+f 1533 1571 1360
+f 1360 1315 1533
+f 1920 1899 1571
+f 1571 1533 1920
+f 836 903 897
+f 897 828 836
+f 864 926 903
+f 903 836 864
+f 910 961 926
+f 926 864 910
+f 966 1016 961
+f 961 910 966
+f 1034 1076 1016
+f 1016 966 1034
+f 1098 1139 1076
+f 1076 1034 1098
+f 1201 1218 1139
+f 1139 1098 1201
+f 1293 1315 1218
+f 1218 1201 1293
+f 1505 1533 1315
+f 1315 1293 1505
+f 1924 1920 1533
+f 1533 1505 1924
+f 789 836 828
+f 828 779 789
+f 825 864 836
+f 836 789 825
+f 873 910 864
+f 864 825 873
+f 933 966 910
+f 910 873 933
+f 999 1034 966
+f 966 933 999
+f 1087 1098 1034
+f 1034 999 1087
+f 1182 1201 1098
+f 1098 1087 1182
+f 1283 1293 1201
+f 1201 1182 1283
+f 1495 1505 1293
+f 1293 1283 1495
+f 1826 1924 1505
+f 1505 1495 1826
+f 776 789 779
+f 779 766 776
+f 802 825 789
+f 789 776 802
+f 858 873 825
+f 825 802 858
+f 920 933 873
+f 873 858 920
+f 986 999 933
+f 933 920 986
+f 1080 1087 999
+f 999 986 1080
+f 1177 1182 1087
+f 1087 1080 1177
+f 1279 1283 1182
+f 1182 1177 1279
+f 1487 1495 1283
+f 1283 1279 1487
+f 1914 1826 1495
+f 1495 1487 1914
+f 1947 1941 1867
+f 1867 1863 1947
+f 1981 1967 1941
+f 1941 1947 1981
+f 2022 1987 1967
+f 1967 1981 2022
+f 2065 2011 1987
+f 1987 2022 2065
+f 2121 2035 2011
+f 2011 2065 2121
+f 2151 2059 2035
+f 2035 2121 2151
+f 2198 2083 2059
+f 2059 2151 2198
+f 2219 2103 2083
+f 2083 2198 2219
+f 2233 2117 2103
+f 2103 2219 2233
+f 2236 2125 2117
+f 2117 2233 2236
+f 1969 1947 1863
+f 1863 1860 1969
+f 2017 1981 1947
+f 1947 1969 2017
+f 2092 2022 1981
+f 1981 2017 2092
+f 2171 2065 2022
+f 2022 2092 2171
+f 2235 2121 2065
+f 2065 2171 2235
+f 2276 2151 2121
+f 2121 2235 2276
+f 2307 2198 2151
+f 2151 2276 2307
+f 2323 2219 2198
+f 2198 2307 2323
+f 2333 2233 2219
+f 2219 2323 2333
+f 2337 2236 2233
+f 2233 2333 2337
+f 1977 1969 1860
+f 1860 1857 1977
+f 2073 2017 1969
+f 1969 1977 2073
+f 2184 2092 2017
+f 2017 2073 2184
+f 2272 2171 2092
+f 2092 2184 2272
+f 2325 2235 2171
+f 2171 2272 2325
+f 2348 2276 2235
+f 2235 2325 2348
+f 2377 2307 2276
+f 2276 2348 2377
+f 2401 2323 2307
+f 2307 2377 2401
+f 2408 2333 2323
+f 2323 2401 2408
+f 2412 2337 2333
+f 2333 2408 2412
+f 1999 1977 1857
+f 1857 1855 1999
+f 2139 2073 1977
+f 1977 1999 2139
+f 2270 2184 2073
+f 2073 2139 2270
+f 2339 2272 2184
+f 2184 2270 2339
+f 2385 2325 2272
+f 2272 2339 2385
+f 2419 2348 2325
+f 2325 2385 2419
+f 2445 2377 2348
+f 2348 2419 2445
+f 2471 2401 2377
+f 2377 2445 2471
+f 2489 2408 2401
+f 2401 2471 2489
+f 2499 2412 2408
+f 2408 2489 2499
+f 2027 1999 1855
+f 1855 1852 2027
+f 2213 2139 1999
+f 1999 2027 2213
+f 2327 2270 2139
+f 2139 2213 2327
+f 2395 2339 2270
+f 2270 2327 2395
+f 2437 2385 2339
+f 2339 2395 2437
+f 2493 2419 2385
+f 2385 2437 2493
+f 2532 2445 2419
+f 2419 2493 2532
+f 2550 2471 2445
+f 2445 2532 2550
+f 2560 2489 2471
+f 2471 2550 2560
+f 2570 2499 2489
+f 2489 2560 2570
+f 2053 2027 1852
+f 1852 1849 2053
+f 2264 2213 2027
+f 2027 2053 2264
+f 2367 2327 2213
+f 2213 2264 2367
+f 2433 2395 2327
+f 2327 2367 2433
+f 2511 2437 2395
+f 2395 2433 2511
+f 2552 2493 2437
+f 2437 2511 2552
+f 2594 2532 2493
+f 2493 2552 2594
+f 2632 2550 2532
+f 2532 2594 2632
+f 2654 2560 2550
+f 2550 2632 2654
+f 2656 2570 2560
+f 2560 2654 2656
+f 2091 2053 1849
+f 1849 1847 2091
+f 2309 2264 2053
+f 2053 2091 2309
+f 2404 2367 2264
+f 2264 2309 2404
+f 2485 2433 2367
+f 2367 2404 2485
+f 2548 2511 2433
+f 2433 2485 2548
+f 2608 2552 2511
+f 2511 2548 2608
+f 2661 2594 2552
+f 2552 2608 2661
+f 2698 2632 2594
+f 2594 2661 2698
+f 2719 2654 2632
+f 2632 2698 2719
+f 2725 2656 2654
+f 2654 2719 2725
+f 2119 2091 1847
+f 1847 1833 2119
+f 2331 2309 2091
+f 2091 2119 2331
+f 2423 2404 2309
+f 2309 2331 2423
+f 2526 2485 2404
+f 2404 2423 2526
+f 2590 2548 2485
+f 2485 2526 2590
+f 2658 2608 2548
+f 2548 2590 2658
+f 2714 2661 2608
+f 2608 2658 2714
+f 2760 2698 2661
+f 2661 2714 2760
+f 2788 2719 2698
+f 2698 2760 2788
+f 2796 2725 2719
+f 2719 2788 2796
+f 2129 2119 1833
+f 1833 1827 2129
+f 2341 2331 2119
+f 2119 2129 2341
+f 2440 2423 2331
+f 2331 2341 2440
+f 2535 2526 2423
+f 2423 2440 2535
+f 2623 2590 2526
+f 2526 2535 2623
+f 2689 2658 2590
+f 2590 2623 2689
+f 2749 2714 2658
+f 2658 2689 2749
+f 2797 2760 2714
+f 2714 2749 2797
+f 2833 2788 2760
+f 2760 2797 2833
+f 2843 2796 2788
+f 2788 2833 2843
+f 2137 2129 1827
+f 1827 1815 2137
+f 2345 2341 2129
+f 2129 2137 2345
+f 2447 2440 2341
+f 2341 2345 2447
+f 2544 2535 2440
+f 2440 2447 2544
+f 2638 2623 2535
+f 2535 2544 2638
+f 2704 2689 2623
+f 2623 2638 2704
+f 2766 2749 2689
+f 2689 2704 2766
+f 2822 2797 2749
+f 2749 2766 2822
+f 2848 2833 2797
+f 2797 2822 2848
+f 2858 2843 2833
+f 2833 2848 2858
+f 1735 2334 2329
+f 1735 2329 2321
+f 1735 2321 2305
+f 1735 2305 2274
+f 1735 2274 2231
+f 1735 2231 2167
+f 1735 2167 2089
+f 1735 2089 2014
+f 1735 2014 1962
+f 1735 1962 1733
+f 2515 2329 2334
+f 2334 2524 2515
+f 2495 2321 2329
+f 2329 2515 2495
+f 2456 2305 2321
+f 2321 2495 2456
+f 2429 2274 2305
+f 2305 2456 2429
+f 2399 2231 2274
+f 2274 2429 2399
+f 2347 2167 2231
+f 2231 2399 2347
+f 2292 2089 2167
+f 2167 2347 2292
+f 2148 2014 2089
+f 2089 2292 2148
+f 2004 1962 2014
+f 2014 2148 2004
+f 1739 1733 1962
+f 1962 2004 1739
+f 2647 2515 2524
+f 2524 2649 2647
+f 2621 2495 2515
+f 2515 2647 2621
+f 2584 2456 2495
+f 2495 2621 2584
+f 2541 2429 2456
+f 2456 2584 2541
+f 2502 2399 2429
+f 2429 2541 2502
+f 2426 2347 2399
+f 2399 2502 2426
+f 2352 2292 2347
+f 2347 2426 2352
+f 2255 2148 2292
+f 2292 2352 2255
+f 2046 2004 2148
+f 2148 2255 2046
+f 1702 1739 2004
+f 2004 2046 1702
+f 2746 2647 2649
+f 2649 2757 2746
+f 2721 2621 2647
+f 2647 2746 2721
+f 2681 2584 2621
+f 2621 2721 2681
+f 2639 2541 2584
+f 2584 2681 2639
+f 2557 2502 2541
+f 2541 2639 2557
+f 2505 2426 2502
+f 2502 2557 2505
+f 2415 2352 2426
+f 2426 2505 2415
+f 2318 2255 2352
+f 2352 2415 2318
+f 2098 2046 2255
+f 2255 2318 2098
+f 1745 1702 2046
+f 2046 2098 1745
+f 2840 2746 2757
+f 2757 2849 2840
+f 2808 2721 2746
+f 2746 2840 2808
+f 2756 2681 2721
+f 2721 2808 2756
+f 2696 2639 2681
+f 2681 2756 2696
+f 2626 2557 2639
+f 2639 2696 2626
+f 2538 2505 2557
+f 2557 2626 2538
+f 2443 2415 2505
+f 2505 2538 2443
+f 2342 2318 2415
+f 2415 2443 2342
+f 2131 2098 2318
+f 2318 2342 2131
+f 1904 1745 2098
+f 2098 2131 1904
+f 2906 2840 2849
+f 2849 2925 2906
+f 2867 2808 2840
+f 2840 2906 2867
+f 2818 2756 2808
+f 2808 2867 2818
+f 2736 2696 2756
+f 2756 2818 2736
+f 2667 2626 2696
+f 2696 2736 2667
+f 2565 2538 2626
+f 2626 2667 2565
+f 2475 2443 2538
+f 2538 2565 2475
+f 2356 2342 2443
+f 2443 2475 2356
+f 2156 2131 2342
+f 2342 2356 2156
+f 1704 1904 2131
+f 2131 2156 1704
+f 2976 2906 2925
+f 2925 2987 2976
+f 2914 2867 2906
+f 2906 2976 2914
+f 2852 2818 2867
+f 2867 2914 2852
+f 2772 2736 2818
+f 2818 2852 2772
+f 2688 2667 2736
+f 2736 2772 2688
+f 2592 2565 2667
+f 2667 2688 2592
+f 2497 2475 2565
+f 2565 2592 2497
+f 2372 2356 2475
+f 2475 2497 2372
+f 2176 2156 2356
+f 2356 2372 2176
+f 1752 1704 2156
+f 2156 2176 1752
+f 2993 2976 2987
+f 2987 3011 2993
+f 2952 2914 2976
+f 2976 2993 2952
+f 2874 2852 2914
+f 2914 2952 2874
+f 2794 2772 2852
+f 2852 2874 2794
+f 2702 2688 2772
+f 2772 2794 2702
+f 2604 2592 2688
+f 2688 2702 2604
+f 2509 2497 2592
+f 2592 2604 2509
+f 2380 2372 2497
+f 2497 2509 2380
+f 2182 2176 2372
+f 2372 2380 2182
+f 1723 1752 2176
+f 2176 2182 1723
+f 3000 2993 3011
+f 3011 3020 3000
+f 2967 2952 2993
+f 2993 3000 2967
+f 2879 2874 2952
+f 2952 2967 2879
+f 2799 2794 2874
+f 2874 2879 2799
+f 2707 2702 2794
+f 2794 2799 2707
+f 2605 2604 2702
+f 2702 2707 2605
+f 2512 2509 2604
+f 2604 2605 2512
+f 2382 2380 2509
+f 2509 2512 2382
+f 2188 2182 2380
+f 2380 2382 2188
+f 1699 1723 2182
+f 2182 2188 1699
+f 3006 3000 3020
+f 3020 3022 3006
+f 2972 2967 3000
+f 3000 3006 2972
+f 2888 2879 2967
+f 2967 2972 2888
+f 2804 2799 2879
+f 2879 2888 2804
+f 2710 2707 2799
+f 2799 2804 2710
+f 2613 2605 2707
+f 2707 2710 2613
+f 2520 2512 2605
+f 2605 2613 2520
+f 2388 2382 2512
+f 2512 2520 2388
+f 2192 2188 2382
+f 2382 2388 2192
+f 1760 1699 2188
+f 2188 2192 1760
+f 1735 1737 1660
+f 1735 1660 1608
+f 1735 1608 1535
+f 1735 1535 1457
+f 1735 1457 1393
+f 1735 1393 1350
+f 1735 1350 1319
+f 1735 1319 1303
+f 1735 1303 1295
+f 1735 1295 1288
+f 1618 1660 1737
+f 1737 1739 1618
+f 1474 1608 1660
+f 1660 1618 1474
+f 1332 1535 1608
+f 1608 1474 1332
+f 1277 1457 1535
+f 1535 1332 1277
+f 1225 1393 1457
+f 1457 1277 1225
+f 1195 1350 1393
+f 1393 1225 1195
+f 1166 1319 1350
+f 1350 1195 1166
+f 1129 1303 1319
+f 1319 1166 1129
+f 1109 1295 1303
+f 1303 1129 1109
+f 1099 1288 1295
+f 1295 1109 1099
+f 1576 1618 1739
+f 1739 1741 1576
+f 1367 1474 1618
+f 1618 1576 1367
+f 1270 1332 1474
+f 1474 1367 1270
+f 1196 1277 1332
+f 1332 1270 1196
+f 1120 1225 1277
+f 1277 1196 1120
+f 1081 1195 1225
+f 1225 1120 1081
+f 1040 1166 1195
+f 1195 1081 1040
+f 1001 1129 1166
+f 1166 1040 1001
+f 975 1109 1129
+f 1129 1001 975
+f 973 1099 1109
+f 1109 975 973
+f 1524 1576 1741
+f 1741 1744 1524
+f 1304 1367 1576
+f 1576 1524 1304
+f 1209 1270 1367
+f 1367 1304 1209
+f 1119 1196 1270
+f 1270 1209 1119
+f 1065 1120 1196
+f 1196 1119 1065
+f 983 1081 1120
+f 1120 1065 983
+f 941 1040 1081
+f 1081 983 941
+f 901 1001 1040
+f 1040 941 901
+f 878 975 1001
+f 1001 901 878
+f 865 973 975
+f 975 878 865
+f 1493 1524 1744
+f 1744 1747 1493
+f 1280 1304 1524
+f 1524 1493 1280
+f 1181 1209 1304
+f 1304 1280 1181
+f 1086 1119 1209
+f 1209 1181 1086
+f 998 1065 1119
+f 1119 1086 998
+f 928 983 1065
+f 1065 998 928
+f 868 941 983
+f 983 928 868
+f 816 901 941
+f 941 868 816
+f 784 878 901
+f 901 816 784
+f 773 865 878
+f 878 784 773
+f 1466 1493 1747
+f 1747 1749 1466
+f 1266 1280 1493
+f 1493 1466 1266
+f 1149 1181 1280
+f 1280 1266 1149
+f 1057 1086 1181
+f 1181 1149 1057
+f 955 998 1086
+f 1086 1057 955
+f 888 928 998
+f 998 955 888
+f 806 868 928
+f 928 888 806
+f 755 816 868
+f 868 806 755
+f 718 784 816
+f 816 755 718
+f 697 773 784
+f 784 718 697
+f 1446 1466 1749
+f 1749 1753 1446
+f 1250 1266 1466
+f 1466 1446 1250
+f 1127 1149 1266
+f 1266 1250 1127
+f 1032 1057 1149
+f 1149 1127 1032
+f 936 955 1057
+f 1057 1032 936
+f 852 888 955
+f 955 936 852
+f 772 806 888
+f 888 852 772
+f 710 755 806
+f 806 772 710
+f 648 718 755
+f 755 710 648
+f 637 697 718
+f 718 648 637
+f 1440 1446 1753
+f 1753 1755 1440
+f 1242 1250 1446
+f 1446 1440 1242
+f 1115 1127 1250
+f 1250 1242 1115
+f 1020 1032 1127
+f 1127 1115 1020
+f 922 936 1032
+f 1032 1020 922
+f 830 852 936
+f 936 922 830
+f 750 772 852
+f 852 830 750
+f 672 710 772
+f 772 750 672
+f 631 648 710
+f 710 672 631
+f 613 637 648
+f 648 631 613
+f 1434 1440 1755
+f 1755 1757 1434
+f 1240 1242 1440
+f 1440 1434 1240
+f 1110 1115 1242
+f 1242 1240 1110
+f 1017 1020 1115
+f 1115 1110 1017
+f 915 922 1020
+f 1020 1017 915
+f 823 830 922
+f 922 915 823
+f 743 750 830
+f 830 823 743
+f 655 672 750
+f 750 743 655
+f 622 631 672
+f 672 655 622
+f 602 613 631
+f 631 622 602
+f 1428 1434 1757
+f 1757 1760 1428
+f 1232 1240 1434
+f 1434 1428 1232
+f 1105 1110 1240
+f 1240 1232 1105
+f 1010 1017 1110
+f 1110 1105 1010
+f 913 915 1017
+f 1017 1010 913
+f 821 823 915
+f 915 913 821
+f 736 743 823
+f 823 821 736
+f 652 655 743
+f 743 736 652
+f 619 622 655
+f 655 652 619
+f 601 602 622
+f 622 619 601
+f 1735 1289 1294
+f 1735 1294 1302
+f 1735 1302 1318
+f 1735 1318 1349
+f 1735 1349 1392
+f 1735 1392 1456
+f 1735 1456 1534
+f 1735 1534 1609
+f 1735 1609 1661
+f 1735 1661 1889
+f 1108 1294 1289
+f 1289 1099 1108
+f 1128 1302 1294
+f 1294 1108 1128
+f 1167 1318 1302
+f 1302 1128 1167
+f 1194 1349 1318
+f 1318 1167 1194
+f 1224 1392 1349
+f 1349 1194 1224
+f 1276 1456 1392
+f 1392 1224 1276
+f 1331 1534 1456
+f 1456 1276 1331
+f 1475 1609 1534
+f 1534 1331 1475
+f 1619 1661 1609
+f 1609 1475 1619
+f 1738 1889 1661
+f 1661 1619 1738
+f 976 1108 1099
+f 1099 974 976
+f 1002 1128 1108
+f 1108 976 1002
+f 1039 1167 1128
+f 1128 1002 1039
+f 1082 1194 1167
+f 1167 1039 1082
+f 1121 1224 1194
+f 1194 1082 1121
+f 1197 1276 1224
+f 1224 1121 1197
+f 1271 1331 1276
+f 1276 1197 1271
+f 1368 1475 1331
+f 1331 1271 1368
+f 1577 1619 1475
+f 1475 1368 1577
+f 1903 1738 1619
+f 1619 1577 1903
+f 877 976 974
+f 974 866 877
+f 902 1002 976
+f 976 877 902
+f 942 1039 1002
+f 1002 902 942
+f 984 1082 1039
+f 1039 942 984
+f 1066 1121 1082
+f 1082 984 1066
+f 1118 1197 1121
+f 1121 1066 1118
+f 1208 1271 1197
+f 1197 1118 1208
+f 1305 1368 1271
+f 1271 1208 1305
+f 1525 1577 1368
+f 1368 1305 1525
+f 1742 1903 1577
+f 1577 1525 1742
+f 783 877 866
+f 866 774 783
+f 815 902 877
+f 877 783 815
+f 867 942 902
+f 902 815 867
+f 927 984 942
+f 942 867 927
+f 997 1066 984
+f 984 927 997
+f 1085 1118 1066
+f 1066 997 1085
+f 1180 1208 1118
+f 1118 1085 1180
+f 1281 1305 1208
+f 1208 1180 1281
+f 1492 1525 1305
+f 1305 1281 1492
+f 1703 1742 1525
+f 1525 1492 1703
+f 717 783 774
+f 774 698 717
+f 756 815 783
+f 783 717 756
+f 805 867 815
+f 815 756 805
+f 887 927 867
+f 867 805 887
+f 956 997 927
+f 927 887 956
+f 1058 1085 997
+f 997 956 1058
+f 1148 1180 1085
+f 1085 1058 1148
+f 1267 1281 1180
+f 1180 1148 1267
+f 1467 1492 1281
+f 1281 1267 1467
+f 1905 1703 1492
+f 1492 1467 1905
+f 647 717 698
+f 698 636 647
+f 709 756 717
+f 717 647 709
+f 771 805 756
+f 756 709 771
+f 851 887 805
+f 805 771 851
+f 935 956 887
+f 887 851 935
+f 1031 1058 956
+f 956 935 1031
+f 1126 1148 1058
+f 1058 1031 1126
+f 1251 1267 1148
+f 1148 1126 1251
+f 1447 1467 1267
+f 1267 1251 1447
+f 1751 1905 1467
+f 1467 1447 1751
+f 630 647 636
+f 636 612 630
+f 671 709 647
+f 647 630 671
+f 749 771 709
+f 709 671 749
+f 829 851 771
+f 771 749 829
+f 921 935 851
+f 851 829 921
+f 1019 1031 935
+f 935 921 1019
+f 1114 1126 1031
+f 1031 1019 1114
+f 1243 1251 1126
+f 1126 1114 1243
+f 1441 1447 1251
+f 1251 1243 1441
+f 1896 1751 1447
+f 1447 1441 1896
+f 623 630 612
+f 612 603 623
+f 656 671 630
+f 630 623 656
+f 744 749 671
+f 671 656 744
+f 824 829 749
+f 749 744 824
+f 916 921 829
+f 829 824 916
+f 1018 1019 921
+f 921 916 1018
+f 1111 1114 1019
+f 1019 1018 1111
+f 1241 1243 1114
+f 1114 1111 1241
+f 1435 1441 1243
+f 1243 1241 1435
+f 1923 1896 1441
+f 1441 1435 1923
+f 617 623 603
+f 603 601 617
+f 650 656 623
+f 623 617 650
+f 734 744 656
+f 656 650 734
+f 818 824 744
+f 744 734 818
+f 912 916 824
+f 824 818 912
+f 1009 1018 916
+f 916 912 1009
+f 1102 1111 1018
+f 1018 1009 1102
+f 1235 1241 1111
+f 1111 1102 1235
+f 1431 1435 1241
+f 1241 1235 1431
+f 1759 1923 1435
+f 1435 1431 1759
+f 1735 1736 1963
+f 1735 1963 2015
+f 1735 2015 2088
+f 1735 2088 2166
+f 1735 2166 2230
+f 1735 2230 2273
+f 1735 2273 2304
+f 1735 2304 2320
+f 1735 2320 2328
+f 1735 2328 2335
+f 2005 1963 1736
+f 1736 1738 2005
+f 2149 2015 1963
+f 1963 2005 2149
+f 2291 2088 2015
+f 2015 2149 2291
+f 2346 2166 2088
+f 2088 2291 2346
+f 2398 2230 2166
+f 2166 2346 2398
+f 2428 2273 2230
+f 2230 2398 2428
+f 2457 2304 2273
+f 2273 2428 2457
+f 2494 2320 2304
+f 2304 2457 2494
+f 2514 2328 2320
+f 2320 2494 2514
+f 2524 2335 2328
+f 2328 2514 2524
+f 2047 2005 1738
+f 1738 1740 2047
+f 2256 2149 2005
+f 2005 2047 2256
+f 2353 2291 2149
+f 2149 2256 2353
+f 2427 2346 2291
+f 2291 2353 2427
+f 2503 2398 2346
+f 2346 2427 2503
+f 2542 2428 2398
+f 2398 2503 2542
+f 2583 2457 2428
+f 2428 2542 2583
+f 2622 2494 2457
+f 2457 2583 2622
+f 2648 2514 2494
+f 2494 2622 2648
+f 2650 2524 2514
+f 2514 2648 2650
+f 2099 2047 1740
+f 1740 1743 2099
+f 2319 2256 2047
+f 2047 2099 2319
+f 2414 2353 2256
+f 2256 2319 2414
+f 2504 2427 2353
+f 2353 2414 2504
+f 2558 2503 2427
+f 2427 2504 2558
+f 2640 2542 2503
+f 2503 2558 2640
+f 2682 2583 2542
+f 2542 2640 2682
+f 2722 2622 2583
+f 2583 2682 2722
+f 2745 2648 2622
+f 2622 2722 2745
+f 2758 2650 2648
+f 2648 2745 2758
+f 2130 2099 1743
+f 1743 1746 2130
+f 2343 2319 2099
+f 2099 2130 2343
+f 2442 2414 2319
+f 2319 2343 2442
+f 2537 2504 2414
+f 2414 2442 2537
+f 2625 2558 2504
+f 2504 2537 2625
+f 2695 2640 2558
+f 2558 2625 2695
+f 2755 2682 2640
+f 2640 2695 2755
+f 2807 2722 2682
+f 2682 2755 2807
+f 2839 2745 2722
+f 2722 2807 2839
+f 2850 2758 2745
+f 2745 2839 2850
+f 2157 2130 1746
+f 1746 1748 2157
+f 2357 2343 2130
+f 2130 2157 2357
+f 2474 2442 2343
+f 2343 2357 2474
+f 2566 2537 2442
+f 2442 2474 2566
+f 2668 2625 2537
+f 2537 2566 2668
+f 2735 2695 2625
+f 2625 2668 2735
+f 2817 2755 2695
+f 2695 2735 2817
+f 2868 2807 2755
+f 2755 2817 2868
+f 2905 2839 2807
+f 2807 2868 2905
+f 2926 2850 2839
+f 2839 2905 2926
+f 2177 2157 1748
+f 1748 1750 2177
+f 2373 2357 2157
+f 2157 2177 2373
+f 2496 2474 2357
+f 2357 2373 2496
+f 2591 2566 2474
+f 2474 2496 2591
+f 2687 2668 2566
+f 2566 2591 2687
+f 2771 2735 2668
+f 2668 2687 2771
+f 2851 2817 2735
+f 2735 2771 2851
+f 2913 2868 2817
+f 2817 2851 2913
+f 2975 2905 2868
+f 2868 2913 2975
+f 2986 2926 2905
+f 2905 2975 2986
+f 2183 2177 1750
+f 1750 1754 2183
+f 2381 2373 2177
+f 2177 2183 2381
+f 2508 2496 2373
+f 2373 2381 2508
+f 2603 2591 2496
+f 2496 2508 2603
+f 2701 2687 2591
+f 2591 2603 2701
+f 2793 2771 2687
+f 2687 2701 2793
+f 2873 2851 2771
+f 2771 2793 2873
+f 2951 2913 2851
+f 2851 2873 2951
+f 2992 2975 2913
+f 2913 2951 2992
+f 3010 2986 2975
+f 2975 2992 3010
+f 2189 2183 1754
+f 1754 1756 2189
+f 2383 2381 2183
+f 2183 2189 2383
+f 2513 2508 2381
+f 2381 2383 2513
+f 2606 2603 2508
+f 2508 2513 2606
+f 2708 2701 2603
+f 2603 2606 2708
+f 2800 2793 2701
+f 2701 2708 2800
+f 2880 2873 2793
+f 2793 2800 2880
+f 2968 2951 2873
+f 2873 2880 2968
+f 3001 2992 2951
+f 2951 2968 3001
+f 3021 3010 2992
+f 2992 3001 3021
+f 2195 2189 1756
+f 1756 1759 2195
+f 2390 2383 2189
+f 2189 2195 2390
+f 2517 2513 2383
+f 2383 2390 2517
+f 2612 2606 2513
+f 2513 2517 2612
+f 2709 2708 2606
+f 2606 2612 2709
+f 2801 2800 2708
+f 2708 2709 2801
+f 2886 2880 2800
+f 2800 2801 2886
+f 2970 2968 2880
+f 2880 2886 2970
+f 3004 3001 2968
+f 2968 2970 3004
+f 3022 3021 3001
+f 3001 3004 3022
diff --git a/aswebglue/examples/Quad/README.md b/aswebglue/examples/Quad/README.md
new file mode 100644
index 0000000..00a0147
--- /dev/null
+++ b/aswebglue/examples/Quad/README.md
@@ -0,0 +1,9 @@
+# Drawing a quad
+
+Drawing a quad isn't much different than drawing a triangle. Quads are used for sprites and billboards in a lot of games, and are rectangles. The main difference between this and the triangle rendering app is that the quad_data static array variable has eight floats in stead of six, because there are four x, y coordinate pairs:
+```
+let quad_data: StaticArray = [-0.5, -0.5,
+-0.5, 0.5,
+ 0.5, -0.5,
+ 0.5, 0.5,];
+```
\ No newline at end of file
diff --git a/aswebglue/examples/Quad/index.html b/aswebglue/examples/Quad/index.html
new file mode 100644
index 0000000..e5b90b9
--- /dev/null
+++ b/aswebglue/examples/Quad/index.html
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+ Quad Drawing Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/Quad/quad.ts b/aswebglue/examples/Quad/quad.ts
new file mode 100644
index 0000000..455808d
--- /dev/null
+++ b/aswebglue/examples/Quad/quad.ts
@@ -0,0 +1,75 @@
+/**
+ * @author Rick Battagline / https://embed.com
+ */
+
+import {WebGLRenderingContext, WebGLShader, WebGLProgram, WebGLBuffer, GLint} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec2 position;
+
+ void main() {
+ gl_Position = vec4( position, 0.0, 1.0 );
+ }
+`;
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ out vec4 color;
+
+ void main() {
+ color = vec4( 0.5, 0.2, 1.0, 1.0 );
+ }
+`;
+
+// initialize webgl
+var gl: WebGLRenderingContext = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+// prettier-ignore
+let quad_data: StaticArray = [
+ -0.5, -0.5,
+ -0.5, 0.5,
+ 0.5, -0.5,
+ 0.5, 0.5
+];
+
+export function displayLoop(delta: i32): void {
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gl.bufferData(gl.ARRAY_BUFFER, quad_data, gl.STATIC_DRAW);
+
+ const dimensions: i32 = 2;
+ const data_type: i32 = gl.FLOAT;
+ const normalize: i32 = +false;
+ const stride: i32 = 0;
+ const offset: i32 = 0;
+
+ gl.vertexAttribPointer(position_al, dimensions, data_type, normalize, stride, offset);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, quad_data.length / 2);
+}
diff --git a/aswebglue/examples/QuadFollowMouse/README.md b/aswebglue/examples/QuadFollowMouse/README.md
new file mode 100644
index 0000000..c143ac7
--- /dev/null
+++ b/aswebglue/examples/QuadFollowMouse/README.md
@@ -0,0 +1,40 @@
+# Quad Follow Mouse
+
+This is a simple *follow the mouse* demo that makes a WebGL quad follow the mouse cursor around the canvas.
+
+
+## Vertex Shader
+The `uniform vec2 quad_pos` is a uniform variable with the x and y coordinates of the mouse relative to the canvas. This value will be combined with the quad vector data to have your quad follow your mouse cursor.
+
+```
+precision highp float;
+
+uniform vec2 quad_pos;
+in vec2 position;
+
+void main() {
+ vec2 pos = position + quad_pos;
+ gl_Position = vec4( pos, 0.0, 1.0 );
+}
+```
+
+## Fragment Shader
+
+In the fragment shader code I hardcoded the color I'm passing out of the shader to a purple shade;
+
+```
+precision highp float;
+out vec4 color;
+
+void main() {
+ color = vec4( 0.5, 0.2, 1.0, 1.0 );
+}
+```
+
+## moveMouse function
+
+The `moveMouse` function replaces the `displayLoop` function in most of the examples. The `moveMouse` passes in the mouse x and y positions relative to the canvas. In addition to buffering the data, the `quad_pos` uniform must be set:
+
+```
+uniform2f(gl, quad_pos, mouse_x, mouse_y);
+```
\ No newline at end of file
diff --git a/aswebglue/examples/QuadFollowMouse/index.html b/aswebglue/examples/QuadFollowMouse/index.html
new file mode 100644
index 0000000..23844b5
--- /dev/null
+++ b/aswebglue/examples/QuadFollowMouse/index.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ Quad Following The Mouse Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/QuadFollowMouse/quad_follow_mouse.ts b/aswebglue/examples/QuadFollowMouse/quad_follow_mouse.ts
new file mode 100644
index 0000000..51143ca
--- /dev/null
+++ b/aswebglue/examples/QuadFollowMouse/quad_follow_mouse.ts
@@ -0,0 +1,76 @@
+import {WebGLRenderingContext, WebGLShader, WebGLProgram, WebGLBuffer, WebGLUniformLocation} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ uniform vec2 quad_pos;
+ in vec2 position;
+
+ void main() {
+ vec2 pos = position + quad_pos;
+ gl_Position = vec4( pos, 0.0, 1.0 );
+ }
+`;
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ out vec4 color;
+
+ void main() {
+ color = vec4( 0.5, 0.2, 1.0, 1.0 );
+ }
+`;
+
+// initialize webgl
+var gl: WebGLRenderingContext = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+// prettier-ignore
+let quad_data: StaticArray = [
+ -0.2, -0.2,
+ -0.2, 0.2,
+ 0.2, -0.2,
+ 0.2, 0.2
+];
+
+let quad_pos: WebGLUniformLocation = gl.getUniformLocation(program, 'quad_pos');
+
+export function moveMouse(mouse_x: f32, mouse_y: f32): void {
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gl.bufferData(gl.ARRAY_BUFFER, quad_data, gl.STATIC_DRAW);
+
+ const dimensions: i32 = 2;
+ const data_type: i32 = gl.FLOAT;
+ const normalize: i32 = +false;
+ const stride: i32 = 0;
+ const offset: i32 = 0;
+
+ gl.vertexAttribPointer(position_al, dimensions, data_type, normalize, stride, offset);
+ gl.uniform2f(quad_pos, mouse_x, mouse_y);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, quad_data.length / 2);
+}
diff --git a/aswebglue/examples/README.md b/aswebglue/examples/README.md
new file mode 100644
index 0000000..6a08277
--- /dev/null
+++ b/aswebglue/examples/README.md
@@ -0,0 +1,8 @@
+#AssemblyScript WebGL Binding Examples
+
+I am creating a series of AssemblyScript WebGL tutorials to show examples of using the AssemblyScript bindings and glue code for WebGL.
+
+These can also be used as a series of small tutorials. You should do them in the following order
+
+1. Hello World Triangle
+2. Color Triangle
diff --git a/aswebglue/examples/RobotTex.psd b/aswebglue/examples/RobotTex.psd
new file mode 100644
index 0000000..90d62b4
Binary files /dev/null and b/aswebglue/examples/RobotTex.psd differ
diff --git a/aswebglue/examples/RobotTexPixel.png b/aswebglue/examples/RobotTexPixel.png
new file mode 100644
index 0000000..51fa801
Binary files /dev/null and b/aswebglue/examples/RobotTexPixel.png differ
diff --git a/aswebglue/examples/RobotTexPixel.psd b/aswebglue/examples/RobotTexPixel.psd
new file mode 100644
index 0000000..588d545
Binary files /dev/null and b/aswebglue/examples/RobotTexPixel.psd differ
diff --git a/aswebglue/examples/RobotTexPixel_n.png b/aswebglue/examples/RobotTexPixel_n.png
new file mode 100644
index 0000000..0f78c6e
Binary files /dev/null and b/aswebglue/examples/RobotTexPixel_n.png differ
diff --git a/aswebglue/examples/SimpleLighting/README.md b/aswebglue/examples/SimpleLighting/README.md
new file mode 100644
index 0000000..e312818
--- /dev/null
+++ b/aswebglue/examples/SimpleLighting/README.md
@@ -0,0 +1,7 @@
+#Hello World Triangle
+
+The triangle is the most basic of graphical programs. When I have read a books on OpenGL / WebGL / DirectX, they always begin with a program that draws a simple triangle.
+
+```
+asc triangle.asc --extension asc --runtime stub --importMemory -o triangle.wasm
+```
\ No newline at end of file
diff --git a/aswebglue/examples/SimpleLighting/index.html b/aswebglue/examples/SimpleLighting/index.html
new file mode 100644
index 0000000..89744a1
--- /dev/null
+++ b/aswebglue/examples/SimpleLighting/index.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+ Simple Lighting Model Example
+
+
+
+ fps:
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/SimpleLighting/simple_lighting.ts b/aswebglue/examples/SimpleLighting/simple_lighting.ts
new file mode 100644
index 0000000..6d81dff
--- /dev/null
+++ b/aswebglue/examples/SimpleLighting/simple_lighting.ts
@@ -0,0 +1,169 @@
+/**
+ * @author Rick Battagline / https://embed.com
+ */
+
+import {WebGLRenderingContext, WebGLShader, WebGLBuffer, GLint, WebGLProgram} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision mediump float;
+
+ in vec3 position;
+ in vec3 normal;
+ out vec4 c;
+
+ void main() {
+ const vec3 light = vec3(0.25, 2.0, -0.5);
+ float d = clamp( dot( normal, light ), 0.0, 1.0);
+ vec4 pos = vec4( position, 1.0 );
+
+ mat4 mRotateTranslate = mat4(
+ 1.0, 0.0, 0.0, 0.0, // column 1
+ 0.0, cos(-0.2),-sin(-0.2), -0.2, // column 2
+ 0.0, sin(-0.0), cos(-0.2), 0.0, // column 3
+ 0.0, 0.0, 0.0, 1.0 // column 4
+ );
+
+ gl_Position = pos * mRotateTranslate;
+ c = vec4(max(d, 0.2), max(d, 0.2), max(d, 0.3), 1.0);
+ }
+`;
+
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+// initialize webgl
+var gl: WebGLRenderingContext = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let normal_al: GLint = gl.getAttribLocation(program, 'normal');
+gl.enableVertexAttribArray(normal_al);
+
+gl.enable(gl.DEPTH_TEST);
+
+// I'M DUPLICATING A LOT OF VERTICES HERE.
+// INDEXES WOULD BE BETTER
+// prettier-ignore
+let cube_data: StaticArray = [
+ // X Y Z NX NY NZ
+ // Front
+ -0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
+ 0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
+ -0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
+
+ 0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
+ -0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
+ 0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
+ // X Y Z NX NY NZ
+ // Top
+ -0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
+ 0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
+ -0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
+
+ 0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
+ -0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
+ 0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
+ // X Y Z NX NY NZ
+ // Back
+ -0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
+ 0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
+ -0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
+
+ 0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
+ -0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
+ 0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
+ // X Y Z NX NY NZ
+ // Right
+ 0.5, -0.5, -0.5, 1.0, 0.0, 0.0,
+ 0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
+ 0.5, 0.5, -0.5, 1.0, 0.0, 0.0,
+
+ 0.5, 0.5, 0.5, 1.0, 0.0, 0.0,
+ 0.5, 0.5, -0.5, 1.0, 0.0, 0.0,
+ 0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
+ // Bottom
+ -0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
+ 0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
+ -0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
+
+ 0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
+ -0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
+ 0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
+
+ // X Y Z NX NY NZ
+ // Left
+ -0.5, -0.5, -0.5, -1.0, 0.0, 0.0,
+ -0.5, -0.5, 0.5, -1.0, 0.0, 0.0,
+ -0.5, 0.5, -0.5, -1.0, 0.0, 0.0,
+
+ -0.5, 0.5, 0.5, -1.0, 0.0, 0.0,
+ -0.5, 0.5, -0.5, -1.0, 0.0, 0.0,
+ -0.5, -0.5, 0.5, -1.0, 0.0, 0.0,
+];
+
+function rotate(theta: f32): void {
+ for (var coord_i: i32 = 0; coord_i < cube_data.length; coord_i += 6) {
+ let x: f32 = cube_data[coord_i];
+ let z: f32 = cube_data[coord_i + 2];
+
+ let nx: f32 = cube_data[coord_i + 3];
+ let nz: f32 = cube_data[coord_i + 5];
+
+ let x1: f32 = x * Mathf.cos(theta) - z * Mathf.sin(theta);
+ let z1: f32 = z * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ let nx1: f32 = nx * Mathf.cos(theta) - nz * Mathf.sin(theta);
+ let nz1: f32 = nz * Mathf.cos(theta) + nx * Mathf.sin(theta);
+
+ cube_data[coord_i] = x1;
+ cube_data[coord_i + 2] = z1;
+
+ cube_data[coord_i + 3] = nx1;
+ cube_data[coord_i + 5] = nz1;
+ }
+
+ return;
+}
+
+export function displayLoop(delta: i32): void {
+ let r: f32 = delta / 10000.0;
+ rotate(r);
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+ gl.bufferData(gl.ARRAY_BUFFER, cube_data, gl.DYNAMIC_DRAW);
+ // dimensions | data_type | normalize | stride | offset
+ gl.vertexAttribPointer(position_al, 3, gl.FLOAT, +false, 24, 0);
+ gl.vertexAttribPointer(normal_al, 3, gl.FLOAT, +false, 24, 12);
+ gl.drawArrays(gl.TRIANGLES, 0, cube_data.length / 6);
+}
diff --git a/aswebglue/examples/SpriteLighting/README.md b/aswebglue/examples/SpriteLighting/README.md
new file mode 100644
index 0000000..174ce43
--- /dev/null
+++ b/aswebglue/examples/SpriteLighting/README.md
@@ -0,0 +1,4 @@
+# Sprite Lighting
+
+This is an example of simple 2D sprite lighting. There are two shaders, because I wanted to render the location of the light source as a point.
+
diff --git a/aswebglue/examples/SpriteLighting/SpaceShip.png b/aswebglue/examples/SpriteLighting/SpaceShip.png
new file mode 100644
index 0000000..32fbb96
Binary files /dev/null and b/aswebglue/examples/SpriteLighting/SpaceShip.png differ
diff --git a/aswebglue/examples/SpriteLighting/SpaceShipN.png b/aswebglue/examples/SpriteLighting/SpaceShipN.png
new file mode 100644
index 0000000..de1c6ef
Binary files /dev/null and b/aswebglue/examples/SpriteLighting/SpaceShipN.png differ
diff --git a/aswebglue/examples/SpriteLighting/index.html b/aswebglue/examples/SpriteLighting/index.html
new file mode 100644
index 0000000..f8cd09e
--- /dev/null
+++ b/aswebglue/examples/SpriteLighting/index.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ Sprite Lighting Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/SpriteLighting/sprite_lighting.ts b/aswebglue/examples/SpriteLighting/sprite_lighting.ts
new file mode 100644
index 0000000..1782179
--- /dev/null
+++ b/aswebglue/examples/SpriteLighting/sprite_lighting.ts
@@ -0,0 +1,214 @@
+/**
+ * @author Rick Battagline / https://embed.com
+ */
+
+import {
+ WebGLRenderingContext,
+ WebGLShader,
+ ImageData,
+ WebGLUniformLocation,
+ WebGLBuffer,
+ GLint,
+ WebGLProgram,
+ WebGLTexture,
+} from '../../WebGL';
+
+const VS_POINT_CODE: string = `#version 300 es
+ in vec2 position;
+
+ void main() {
+ gl_Position = vec4(position, 0.0, 1.0);
+ gl_PointSize = 16.0;
+ }
+`;
+
+const FS_POINT_CODE: string = `#version 300 es
+precision highp float;
+out vec4 color;
+
+void main() {
+ color = vec4(1.0, 1.0, 1.0, 1.0);;
+}
+`;
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec2 position;
+ in vec2 tex_coord;
+
+ out vec2 tc;
+
+ void main() {
+ gl_Position = vec4(position, 0.0, 1.0);
+ tc = tex_coord;
+ }
+`;
+
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec2 tc;
+
+ uniform sampler2D sampler;
+ uniform sampler2D normal_map;
+ uniform vec3 light_source;
+
+ out vec4 color;
+
+ void main() {
+ vec3 NormalMap = texture( normal_map, tc ).xyz;
+ vec3 norm;
+ norm.xyz = NormalMap.rgb * 2.0 - 1.0;
+
+ vec3 N = normalize(norm);
+ vec3 L = normalize(light_source);
+
+ float norm_light = clamp(dot( N, L ), 0.5, 2.0);
+
+ color = texture( sampler, tc );
+ color.rgb *= norm_light; // / 3.0;
+ }
+`;
+
+// light source
+var light_x: f32 = 0.5;
+var light_y: f32 = 0.0;
+var light_z: f32 = 0.5;
+
+// initialize webgl
+var gl: WebGLRenderingContext = new WebGLRenderingContext('cnvs', 'webgl2');
+
+// ImageData, createImage, imageReady,
+var image_id: ImageData = gl.createImage('SpaceShip.png');
+var normal_image_id: ImageData = gl.createImage('SpaceShipN.png');
+var image_ready: bool = false;
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let tex_coord_al: GLint = gl.getAttribLocation(program, 'tex_coord');
+gl.enableVertexAttribArray(tex_coord_al);
+
+gl.enable(gl.BLEND);
+gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+
+let vertex_shader2: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader2, VS_POINT_CODE);
+gl.compileShader(vertex_shader2);
+
+let fragment_shader2: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader2, FS_POINT_CODE);
+gl.compileShader(fragment_shader2);
+
+let program2: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program2, vertex_shader2);
+gl.attachShader(program2, fragment_shader2);
+
+gl.linkProgram(program2);
+
+gl.useProgram(program2);
+
+let buffer2: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer2);
+
+let position2_al: GLint = gl.getAttribLocation(program2, 'position');
+gl.enableVertexAttribArray(position2_al);
+
+// prettier-ignore
+let quad_data: StaticArray = [
+ // x y u v
+ -0.15, -0.15, 0.0, 0.0,
+ -0.15, 0.15, 0.0, 0.99,
+ 0.15, -0.15, 0.95, 0.0,
+ 0.15, 0.15, 0.95, 0.99,];
+
+let light_point: StaticArray = [0.0, 0.0];
+
+let texture: WebGLTexture = gl.createTexture();
+let normal_texture: WebGLTexture = gl.createTexture();
+let sampler: WebGLUniformLocation = gl.getUniformLocation(program, 'sampler');
+let normal_map: WebGLUniformLocation = gl.getUniformLocation(program, 'normal_map');
+let light_source: WebGLUniformLocation = gl.getUniformLocation(program, 'light_source');
+
+function rotateLight(theta: f32): void {
+ let x: f32 = light_x;
+ let y: f32 = light_y;
+
+ light_x = x * Mathf.cos(theta) - y * Mathf.sin(theta);
+ light_y = y * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ light_point[0] = light_x;
+ light_point[1] = light_y;
+ return;
+}
+
+export function displayLoop(delta: i32): void {
+ let r: f32 = delta / 1000.0;
+ rotateLight(r);
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ if (image_ready == false) {
+ if (gl.imageReady(image_id) == false || gl.imageReady(normal_image_id) == false) {
+ return;
+ }
+ gl.useProgram(program);
+
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +true);
+ gl.activeTexture(gl.TEXTURE0);
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image_id);
+
+ gl.uniform1i(sampler, 0);
+
+ gl.activeTexture(gl.TEXTURE1);
+ gl.bindTexture(gl.TEXTURE_2D, normal_texture);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, normal_image_id);
+
+ gl.uniform1i(normal_map, 1);
+ image_ready = true;
+ }
+ gl.useProgram(program);
+
+ gl.uniform3f(light_source, light_x, light_y, light_z);
+ gl.bufferData(gl.ARRAY_BUFFER, quad_data, gl.STATIC_DRAW);
+
+ //vertexAttribPointer attribute | dimensions | data type | normalize | stride bytes | offset bytes
+ gl.vertexAttribPointer(position_al, 2, gl.FLOAT, +false, 16, 0);
+ gl.vertexAttribPointer(tex_coord_al, 2, gl.FLOAT, +false, 16, 8);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, quad_data.length / 4);
+
+ gl.useProgram(program2);
+ gl.bufferData(gl.ARRAY_BUFFER, light_point, gl.STATIC_DRAW);
+ gl.vertexAttribPointer(position2_al, 2, gl.FLOAT, +false, 8, 0);
+ gl.drawArrays(gl.POINTS, 0, 1);
+}
diff --git a/aswebglue/examples/TextureModel/RobotTex.ts b/aswebglue/examples/TextureModel/RobotTex.ts
new file mode 100644
index 0000000..12f9a23
--- /dev/null
+++ b/aswebglue/examples/TextureModel/RobotTex.ts
@@ -0,0 +1,630 @@
+
+export class VertGroup {
+ mat_index: i32;
+ obj_index: i32;
+ start_face: i32;
+ length: i32;
+
+ constructor(material_index: i32, object_index: i32, starting_face: i32, len: i32 ) {
+ this.mat_index = material_index;
+ this.obj_index = object_index;
+ this.start_face = starting_face;
+ this.length = len;
+ }
+}
+
+export class MaterialMap {
+ ambient: string | null;
+ diffuse: string | null;
+ specular: string | null;
+ emission: string | null;
+
+ constructor( Ka: string | null, Kd: string | null,
+ Ks: string | null, Ke: string | null ) {
+ this.ambient = Ka;
+ this.diffuse = Kd;
+ this.specular = Ks;
+ this.emission = Ke;
+ }
+}
+
+export var objArray = new Array>(); //1
+export var matArray = new Array>(); //1
+export var groupArray = new Array(); //0
+export var matMapArray = new Array(); //BBB
+
+export var MaterialTexture_mat:StaticArray = [
+ 225.000000, // specularExponent
+ 1.000000, 1.000000, 1.000000, // ambientReflectivity
+ 0.100000, 0.100000, 0.100000, // diffuseReflectivity
+ 0.500000, 0.500000, 0.500000, // specularReflectivity
+ 0.000000, 0.000000, 0.000000, // emission
+ 1.450000, // opticalDensity
+ 1.000000, // dissolveFactor
+ 2, // illuminationModel
+ ];
+
+matMapArray.push(new MaterialMap(null, 'RobotTexPixel.png', null, null));
+
+matArray.push(MaterialTexture_mat);
+
+
+export var RobotTex_data: StaticArray =[
+//X, Y, Z, U, V, NX, NY, NZ
+-0.1, 0.1, -0.1, 0.361776, 0.180764, 0, 0.2651, -0.9642,
+0.03964, 0.319577, -0.03964, 0.23574, 0.386301, 0, 0.2651, -0.9642,
+0.1, 0.1, -0.1, 0.18126, 0.180764, 0, 0.2651, -0.9642,
+0.1, 0.1, 0.1, 0.180764, 0.361279, 0, 0, 1,
+-0.1, -0.1, 0.1, 0.000248, 0.180764, 0, 0, 1,
+0.1, -0.1, 0.1, 0.180764, 0.180764, 0, 0, 1,
+-0.1, 0.1, 0.1, 0.36905, 0.183648, -1, 0, 0,
+-0.1, -0.1, -0.1, 0.552126, 0.00057, -1, 0, 0,
+-0.1, -0.1, 0.1, 0.369049, 0.00057, -1, 0, 0,
+0.1, -0.1, -0.1, 0.180764, 0.000248, 0, -1, 0,
+-0.1, -0.1, 0.1, 0.000248, 0.180764, 0, -1, 0,
+-0.1, -0.1, -0.1, 0.000248, 0.000248, 0, -1, 0,
+0.1, 0.1, -0.1, 0.36907, 0.183679, 1, 0, 0,
+0.1, -0.1, 0.1, 0.552146, 0.000601, 1, 0, 0,
+0.1, -0.1, -0.1, 0.369069, 0.000601, 1, 0, 0,
+-0.1, 0.1, -0.1, 0.361776, 0.180764, 0, 0, -1,
+0.1, -0.1, -0.1, 0.18126, 0.000248, 0, 0, -1,
+-0.1, -0.1, -0.1, 0.361776, 0.000248, 0, 0, -1,
+-0.03964, 0.319577, 0.03964, 0.42431, 0.392101, -0.9781, -0.2081, 0,
+-0.070778, 0.465943, -0.070778, 0.525368, 0.529051, -0.9781, -0.2081, 0,
+-0.03964, 0.319577, -0.03964, 0.496874, 0.392099, -0.9781, -0.2081, 0,
+0.1, 0.1, 0.1, 0.180764, 0.361279, 0, 0.2651, 0.9642,
+-0.03964, 0.319577, 0.03964, 0.054728, 0.566817, 0, 0.2651, 0.9642,
+-0.1, 0.1, 0.1, 0.000248, 0.361279, 0, 0.2651, 0.9642,
+-0.1, 0.1, 0.1, 0.36905, 0.183648, -0.9642, 0.2651, 0,
+-0.03964, 0.319577, -0.03964, 0.496874, 0.392099, -0.9642, 0.2651, 0,
+-0.1, 0.1, -0.1, 0.552126, 0.183647, -0.9642, 0.2651, 0,
+0.1, 0.1, -0.1, 0.36907, 0.183679, 0.9642, 0.2651, 0,
+0.03964, 0.319577, 0.03964, 0.496894, 0.39213, 0.9642, 0.2651, 0,
+0.1, 0.1, 0.1, 0.552146, 0.183678, 0.9642, 0.2651, 0,
+-0.070778, 0.465943, -0.070778, 0.3354, 0.521364, 0, 0, -1,
+0.070778, 0.574785, -0.070778, 0.207635, 0.619603, 0, 0, -1,
+0.070778, 0.465943, -0.070778, 0.207635, 0.521364, 0, 0, -1,
+0.03964, 0.319577, 0.03964, 0.126284, 0.566817, 0, -0.2081, 0.9781,
+-0.070778, 0.465943, 0.070778, 0.026623, 0.70188, 0, -0.2081, 0.9781,
+-0.03964, 0.319577, 0.03964, 0.054728, 0.566817, 0, -0.2081, 0.9781,
+-0.03964, 0.319577, -0.03964, 0.307296, 0.386301, 0, -0.2081, -0.9781,
+0.070778, 0.465943, -0.070778, 0.207635, 0.521364, 0, -0.2081, -0.9781,
+0.03964, 0.319577, -0.03964, 0.23574, 0.386301, 0, -0.2081, -0.9781,
+0.03964, 0.319577, -0.03964, 0.424331, 0.392131, 0.9781, -0.2081, 0,
+0.070778, 0.465943, 0.070778, 0.525388, 0.529082, 0.9781, -0.2081, 0,
+0.03964, 0.319577, 0.03964, 0.496894, 0.39213, 0.9781, -0.2081, 0,
+-0.070778, 0.574785, 0.070778, 0.394883, 0.635328, -0.6461, 0.7632, 0,
+-0.036361, 0.603924, -0.036361, 0.492928, 0.676593, -0.6461, 0.7632, 0,
+-0.070778, 0.574785, -0.070778, 0.52442, 0.635324, -0.6461, 0.7632, 0,
+0.070778, 0.465943, 0.070778, 0.525388, 0.529082, 0.7408, 0, 0.6717,
+0.098092, 0.551623, 0.040654, 0.492176, 0.604967, 0.7408, 0, 0.6717,
+0.070778, 0.574785, 0.070778, 0.52444, 0.635354, 0.7408, 0, 0.6717,
+-0.070778, 0.465943, -0.070778, 0.525368, 0.529051, -0.7408, 0, -0.6717,
+-0.098092, 0.551623, -0.040654, 0.492156, 0.604936, -0.7408, 0, -0.6717,
+-0.070778, 0.574785, -0.070778, 0.52442, 0.635324, -0.7408, 0, -0.6717,
+0.070778, 0.465943, 0.070778, 0.154389, 0.70188, 0, 0, 1,
+-0.070778, 0.574785, 0.070778, 0.026623, 0.800118, 0, 0, 1,
+-0.070778, 0.465943, 0.070778, 0.026623, 0.70188, 0, 0, 1,
+0.036361, 0.603924, 0.036361, 0.123324, 0.84082, 0, 0, 1,
+-0.036361, 0.622896, 0.036361, 0.057687, 0.857945, 0, 0, 1,
+-0.036361, 0.603924, 0.036361, 0.057687, 0.84082, 0, 0, 1,
+0.070778, 0.574785, 0.070778, 0.154388, 0.800118, 0, 0.7632, 0.6461,
+-0.036361, 0.603924, 0.036361, 0.057687, 0.84082, 0, 0.7632, 0.6461,
+-0.070778, 0.574785, 0.070778, 0.026623, 0.800118, 0, 0.7632, 0.6461,
+-0.070778, 0.574785, -0.070778, 0.3354, 0.619603, 0, 0.7632, -0.6461,
+0.036361, 0.603924, -0.036361, 0.238699, 0.660305, 0, 0.7632, -0.6461,
+0.070778, 0.574785, -0.070778, 0.207635, 0.619603, 0, 0.7632, -0.6461,
+0.070778, 0.574785, -0.070778, 0.394903, 0.635358, 0.6461, 0.7632, 0,
+0.036361, 0.603924, 0.036361, 0.492948, 0.676623, 0.6461, 0.7632, 0,
+0.070778, 0.574785, 0.070778, 0.52444, 0.635354, 0.6461, 0.7632, 0,
+-0.036361, 0.622896, -0.036361, 0.304336, 0.677429, 0, -0.6177, -0.7864,
+0.052774, 0.643794, -0.052774, 0.223885, 0.701413, 0, -0.6177, -0.7864,
+0.036361, 0.622896, -0.036361, 0.238699, 0.677429, 0, -0.6177, -0.7864,
+-0.036361, 0.603924, -0.036361, 0.304336, 0.660305, 0, 0, -1,
+0.036361, 0.622896, -0.036361, 0.238699, 0.677429, 0, 0, -1,
+0.036361, 0.603924, -0.036361, 0.238699, 0.660305, 0, 0, -1,
+0.036361, 0.603924, -0.036361, 0.426397, 0.676626, 1, 0, 0,
+0.036361, 0.622896, 0.036361, 0.492952, 0.693988, 1, 0, 0,
+0.036361, 0.603924, 0.036361, 0.492948, 0.676623, 1, 0, 0,
+-0.036361, 0.603924, 0.036361, 0.426377, 0.676595, -1, 0, 0,
+-0.036361, 0.622896, -0.036361, 0.492931, 0.693957, -1, 0, 0,
+-0.036361, 0.603924, -0.036361, 0.492928, 0.676593, -1, 0, 0,
+-0.052774, 0.643794, 0.052774, 0.41135, 0.718281, -0.9976, -0.0692, 0,
+-0.058197, 0.722006, -0.058197, 0.512924, 0.790039, -0.9976, -0.0692, 0,
+-0.052774, 0.643794, -0.052774, 0.507958, 0.718279, -0.9976, -0.0692, 0,
+0.036361, 0.622896, -0.036361, 0.426395, 0.69399, 0.7864, -0.6177, 0,
+0.052774, 0.643794, 0.052774, 0.507978, 0.71831, 0.7864, -0.6177, 0,
+0.036361, 0.622896, 0.036361, 0.492952, 0.693988, 0.7864, -0.6177, 0,
+-0.036361, 0.622896, 0.036361, 0.426375, 0.693959, -0.7864, -0.6177, 0,
+-0.052774, 0.643794, -0.052774, 0.507958, 0.718279, -0.7864, -0.6177, 0,
+-0.036361, 0.622896, -0.036361, 0.492931, 0.693957, -0.7864, -0.6177, 0,
+0.036361, 0.622896, 0.036361, 0.123324, 0.857945, 0, -0.6177, 0.7864,
+-0.052774, 0.643794, 0.052774, 0.042873, 0.881929, 0, -0.6177, 0.7864,
+-0.036361, 0.622896, 0.036361, 0.057687, 0.857945, 0, -0.6177, 0.7864,
+-0.058197, 0.722006, -0.058197, 0.324045, 0.772175, 0, 0.5681, -0.8229,
+0.028575, 0.764915, -0.028575, 0.245726, 0.819236, 0, 0.5681, -0.8229,
+0.058197, 0.722006, -0.058197, 0.21899, 0.772175, 0, 0.5681, -0.8229,
+0.052774, 0.643794, 0.052774, 0.138139, 0.881929, 0, -0.0692, 0.9976,
+-0.058197, 0.722006, 0.058197, 0.037978, 0.952691, 0, -0.0692, 0.9976,
+-0.052774, 0.643794, 0.052774, 0.042873, 0.881929, 0, -0.0692, 0.9976,
+-0.052774, 0.643794, -0.052774, 0.319151, 0.701413, 0, -0.0692, -0.9976,
+0.058197, 0.722006, -0.058197, 0.21899, 0.772175, 0, -0.0692, -0.9976,
+0.052774, 0.643794, -0.052774, 0.223885, 0.701413, 0, -0.0692, -0.9976,
+0.052774, 0.643794, -0.052774, 0.411371, 0.718312, 0.9976, -0.0692, 0,
+0.058197, 0.722006, 0.058197, 0.512944, 0.79007, 0.9976, -0.0692, 0,
+0.052774, 0.643794, 0.052774, 0.507978, 0.71831, 0.9976, -0.0692, 0,
+-0.028575, 0.764915, -0.028575, 0.297309, 0.819236, 0, 1, 0,
+0.028575, 0.764915, 0.028575, 0.245726, 0.870819, 0, 1, 0,
+0.028575, 0.764915, -0.028575, 0.245726, 0.819236, 0, 1, 0,
+0.058197, 0.722006, -0.058197, 0.406408, 0.790072, 0.8229, 0.5681, 0,
+0.028575, 0.764915, 0.028575, 0.485832, 0.837796, 0.8229, 0.5681, 0,
+0.058197, 0.722006, 0.058197, 0.512944, 0.79007, 0.8229, 0.5681, 0,
+-0.058197, 0.722006, 0.058197, 0.406388, 0.790041, -0.8229, 0.5681, 0,
+-0.028575, 0.764915, -0.028575, 0.485812, 0.837765, -0.8229, 0.5681, 0,
+-0.058197, 0.722006, -0.058197, 0.512924, 0.790039, -0.8229, 0.5681, 0,
+0.058197, 0.722006, 0.058197, 0.143033, 0.952691, 0, 0.5681, 0.8229,
+-0.028575, 0.764915, 0.028575, 0.064714, 0.999752, 0, 0.5681, 0.8229,
+-0.058197, 0.722006, 0.058197, 0.037978, 0.952691, 0, 0.5681, 0.8229,
+0.098092, 0.551623, -0.040654, 0.71393, 0.424338, 0, 0, -1,
+0.128092, 0.489106, -0.040654, 0.694279, 0.357676, 0, 0, -1,
+0.098092, 0.489106, -0.040654, 0.723983, 0.362427, 0, 0, -1,
+0.070778, 0.465943, -0.070778, 0.39584, 0.529085, 0.6468, -0.7627, 0,
+0.098092, 0.489106, 0.040654, 0.490002, 0.556727, 0.6468, -0.7627, 0,
+0.070778, 0.465943, 0.070778, 0.525388, 0.529082, 0.6468, -0.7627, 0,
+0.070778, 0.574785, -0.070778, 0.394903, 0.635358, 0.7408, 0, -0.6717,
+0.098092, 0.489106, -0.040654, 0.428108, 0.559472, 0.7408, 0, -0.6717,
+0.070778, 0.465943, -0.070778, 0.39584, 0.529085, 0.7408, 0, -0.6717,
+0.070778, 0.574785, 0.070778, 0.52444, 0.635354, 0.6468, 0.7627, 0,
+0.098092, 0.551623, -0.040654, 0.430285, 0.607712, 0.6468, 0.7627, 0,
+0.070778, 0.574785, -0.070778, 0.394903, 0.635358, 0.6468, 0.7627, 0,
+-0.098092, 0.551623, 0.040654, 0.805257, 0.424346, 0, 0, 1,
+-0.128092, 0.489106, 0.040654, 0.824602, 0.359773, 0, 0, 1,
+-0.098092, 0.489106, 0.040654, 0.795794, 0.364314, 0, 0, 1,
+-0.070778, 0.574785, -0.070778, 0.52442, 0.635324, -0.6468, 0.7627, 0,
+-0.098092, 0.551623, 0.040654, 0.430265, 0.607682, -0.6468, 0.7627, 0,
+-0.070778, 0.574785, 0.070778, 0.394883, 0.635328, -0.6468, 0.7627, 0,
+-0.070778, 0.574785, 0.070778, 0.394883, 0.635328, -0.7408, 0, 0.6717,
+-0.098092, 0.489106, 0.040654, 0.428088, 0.559442, -0.7408, 0, 0.6717,
+-0.070778, 0.465943, 0.070778, 0.39582, 0.529055, -0.7408, 0, 0.6717,
+-0.070778, 0.465943, 0.070778, 0.39582, 0.529055, -0.6468, -0.7627, 0,
+-0.098092, 0.489106, -0.040654, 0.489982, 0.556697, -0.6468, -0.7627, 0,
+-0.070778, 0.465943, -0.070778, 0.525368, 0.529051, -0.6468, -0.7627, 0,
+-0.128092, 0.489106, 0.040654, 0.664224, 0.846564, -1, 0, 0,
+-0.128092, 0.551623, -0.040654, 0.746037, 0.889876, -1, 0, 0,
+-0.128092, 0.489106, -0.040654, 0.736569, 0.83425, -1, 0, 0,
+-0.098092, 0.551623, -0.040654, 0.750581, 0.916569, 0, 1, 0,
+-0.128092, 0.551623, 0.040654, 0.673692, 0.90219, 0, 1, 0,
+-0.098092, 0.551623, 0.040654, 0.678235, 0.928883, 0, 1, 0,
+-0.098092, 0.489106, -0.040654, 0.723967, 0.362496, 0, 0, -1,
+-0.128092, 0.551623, -0.040654, 0.684255, 0.419532, 0, 0, -1,
+-0.098092, 0.551623, -0.040654, 0.713935, 0.424346, 0, 0, -1,
+0.098092, 0.489106, -0.040654, 0.723983, 0.362427, -0.9978, -0.0665, 0,
+0.103989, 0.400565, 0.024672, 0.786539, 0.271717, -0.9978, -0.0665, 0,
+0.098092, 0.489106, 0.040654, 0.795802, 0.364322, -0.9978, -0.0665, 0,
+0.128092, 0.489106, -0.040654, 0.736444, 0.835025, 1, 0, 0,
+0.128092, 0.551623, 0.040654, 0.673566, 0.902965, 1, 0, 0,
+0.128092, 0.489106, 0.040654, 0.664098, 0.847339, 1, 0, 0,
+0.128092, 0.489106, 0.040654, 0.664098, 0.847339, 0.9978, -0.0665, 0,
+0.122195, 0.400565, -0.024672, 0.708784, 0.758489, 0.9978, -0.0665, 0,
+0.128092, 0.489106, -0.040654, 0.736444, 0.835025, 0.9978, -0.0665, 0,
+0.098092, 0.489106, 0.040654, 0.795802, 0.364322, 0, 0, 1,
+0.128092, 0.551623, 0.040654, 0.834068, 0.419902, 0, 0, 1,
+0.098092, 0.551623, 0.040654, 0.805287, 0.424405, 0, 0, 1,
+0.098092, 0.551623, 0.040654, 0.67811, 0.929659, 0, 1, 0,
+0.128092, 0.551623, -0.040654, 0.745912, 0.890651, 0, 1, 0,
+0.098092, 0.551623, -0.040654, 0.750455, 0.917345, 0, 1, 0,
+-0.122195, 0.400565, 0.024672, 0.80532, 0.271717, 0, 0.239, 0.971,
+-0.098092, 0.335624, 0.040654, 0.79317, 0.22111, 0, 0.239, 0.971,
+-0.103989, 0.400565, 0.024672, 0.786556, 0.271717, 0, 0.239, 0.971,
+0.122195, 0.400565, 0.024672, 0.664879, 0.765962, 0.9921, 0.1251, 0,
+0.128092, 0.353791, -0.040654, 0.715864, 0.71412, 0.9921, 0.1251, 0,
+0.122195, 0.400565, -0.024672, 0.708784, 0.758489, 0.9921, 0.1251, 0,
+0.098092, 0.489106, -0.040654, 0.723983, 0.362427, 0, -0.1776, -0.9841,
+0.122195, 0.400565, -0.024672, 0.714546, 0.271717, 0, -0.1776, -0.9841,
+0.103989, 0.400565, -0.024672, 0.732661, 0.271717, 0, -0.1776, -0.9841,
+-0.128092, 0.489106, -0.040654, 0.736569, 0.83425, -0.9978, -0.0665, 0,
+-0.122195, 0.400565, 0.024672, 0.665005, 0.765187, -0.9978, -0.0665, 0,
+-0.128092, 0.489106, 0.040654, 0.664224, 0.846564, -0.9978, -0.0665, 0,
+-0.098092, 0.489106, -0.040654, 0.723967, 0.362496, 0, -0.1776, -0.9841,
+-0.122195, 0.400565, -0.024672, 0.714559, 0.271717, 0, -0.1776, -0.9841,
+-0.128092, 0.489106, -0.040654, 0.694287, 0.357682, 0, -0.1776, -0.9841,
+-0.098092, 0.489106, 0.040654, 0.795794, 0.364314, 0, -0.1776, 0.9841,
+-0.122195, 0.400565, 0.024672, 0.80532, 0.271717, 0, -0.1776, 0.9841,
+-0.103989, 0.400565, 0.024672, 0.786556, 0.271717, 0, -0.1776, 0.9841,
+0.098092, 0.489106, 0.040654, 0.795802, 0.364322, 0, -0.1776, 0.9841,
+0.122195, 0.400565, 0.024672, 0.805282, 0.271717, 0, -0.1776, 0.9841,
+0.128092, 0.489106, 0.040654, 0.824644, 0.359803, 0, -0.1776, 0.9841,
+-0.098092, 0.489106, 0.040654, 0.795794, 0.364314, 0.9978, -0.0665, 0,
+-0.103989, 0.400565, -0.024672, 0.732728, 0.271717, 0.9978, -0.0665, 0,
+-0.098092, 0.489106, -0.040654, 0.723967, 0.362496, 0.9978, -0.0665, 0,
+0.098092, 0.335624, 0.040654, 0.79313, 0.221103, 0, -0.6592, 0.752,
+0.128092, 0.234285, -0.048174, 0.769253, 0.105121, 0, -0.6592, 0.752,
+0.128092, 0.335624, 0.040654, 0.818474, 0.217189, 0, -0.6592, 0.752,
+0.098092, 0.353791, -0.040654, 0.729794, 0.227227, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.745617, 0.117066, -1, 0, 0,
+0.098092, 0.335624, 0.040654, 0.79313, 0.221103, -1, 0, 0,
+-0.103989, 0.400565, 0.024672, 0.786556, 0.271717, 0.9921, 0.1251, 0,
+-0.098092, 0.353791, -0.040654, 0.729795, 0.227223, 0.9921, 0.1251, 0,
+-0.103989, 0.400565, -0.024672, 0.732728, 0.271717, 0.9921, 0.1251, 0,
+0.122195, 0.400565, -0.024672, 0.714546, 0.271717, 0, 0.3233, -0.9463,
+0.098092, 0.353791, -0.040654, 0.729794, 0.227227, 0, 0.3233, -0.9463,
+0.103989, 0.400565, -0.024672, 0.732661, 0.271717, 0, 0.3233, -0.9463,
+-0.122195, 0.400565, -0.024672, 0.714559, 0.271717, 0, 0.3233, -0.9463,
+-0.098092, 0.353791, -0.040654, 0.729795, 0.227223, 0, 0.3233, -0.9463,
+-0.128092, 0.353791, -0.040654, 0.703205, 0.231114, 0, 0.3233, -0.9463,
+-0.122195, 0.400565, 0.024672, 0.665005, 0.765187, -0.9952, 0.0956, 0.0214,
+-0.128092, 0.353791, -0.040654, 0.71599, 0.713345, -0.9952, 0.0956, 0.0214,
+-0.128092, 0.335624, 0.040654, 0.640888, 0.709596, -0.9952, 0.0956, 0.0214,
+0.103989, 0.400565, 0.024672, 0.786539, 0.271717, -0.9952, 0.0956, 0.0214,
+0.098092, 0.353791, -0.040654, 0.729794, 0.227227, -0.9952, 0.0956, 0.0214,
+0.098092, 0.335624, 0.040654, 0.79313, 0.221103, -0.9952, 0.0956, 0.0214,
+0.103989, 0.400565, 0.024672, 0.786539, 0.271717, 0, 0.239, 0.971,
+0.128092, 0.335624, 0.040654, 0.818474, 0.217189, 0, 0.239, 0.971,
+0.122195, 0.400565, 0.024672, 0.805282, 0.271717, 0, 0.239, 0.971,
+-0.098092, 0.234285, -0.079572, 0.718318, 0.110819, 0, 0.6843, -0.7292,
+-0.128092, 0.207583, -0.104626, 0.685736, 0.083383, 0, 0.6843, -0.7292,
+-0.128092, 0.234285, -0.079572, 0.684225, 0.118309, 0, 0.6843, -0.7292,
+0.128092, 0.234285, -0.079572, 0.684224, 0.118316, 0, 0.6843, -0.7292,
+0.098092, 0.207583, -0.104626, 0.706537, 0.090094, 0, 0.6843, -0.7292,
+0.098092, 0.234285, -0.079572, 0.718335, 0.110798, 0, 0.6843, -0.7292,
+0.128092, 0.353791, -0.040654, 0.715864, 0.71412, 1, 0, 0,
+0.128092, 0.234285, -0.048174, 0.704313, 0.606663, 1, 0, 0,
+0.128092, 0.234285, -0.079572, 0.732243, 0.60187, 1, 0, 0,
+-0.128092, 0.335624, 0.040654, 0.818563, 0.217058, 0, -0.6592, 0.752,
+-0.098092, 0.234285, -0.048174, 0.745628, 0.117077, 0, -0.6592, 0.752,
+-0.098092, 0.335624, 0.040654, 0.79317, 0.22111, 0, -0.6592, 0.752,
+-0.098092, 0.353791, -0.040654, 0.729795, 0.227223, 1, 0, 0,
+-0.098092, 0.234285, -0.048174, 0.745628, 0.117077, 1, 0, 0,
+-0.098092, 0.234285, -0.079572, 0.718318, 0.110819, 1, 0, 0,
+0.128092, 0.353791, -0.040654, 0.703207, 0.231088, 0, 0.3097, -0.9509,
+0.098092, 0.234285, -0.079572, 0.718335, 0.110798, 0, 0.3097, -0.9509,
+0.098092, 0.353791, -0.040654, 0.729794, 0.227227, 0, 0.3097, -0.9509,
+-0.098092, 0.353791, -0.040654, 0.729795, 0.227223, 0, 0.3097, -0.9508,
+-0.128092, 0.234285, -0.079572, 0.684225, 0.118309, 0, 0.3097, -0.9508,
+-0.128092, 0.353791, -0.040654, 0.703205, 0.231114, 0, 0.3097, -0.9508,
+-0.128092, 0.353791, -0.040654, 0.71599, 0.713345, -1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.704438, 0.605888, -1, 0, 0,
+-0.128092, 0.335624, 0.040654, 0.640888, 0.709596, -1, 0, 0,
+0.098092, 0.207583, -0.104626, 0.706537, 0.090094, 0, 0.1306, -0.9914,
+0.120592, 0.186814, -0.107362, 0.708302, 0.063056, 0, 0.1306, -0.9914,
+0.105592, 0.186814, -0.107362, 0.716731, 0.075033, 0, 0.1306, -0.9914,
+-0.098092, 0.192117, -0.077302, 0.730769, 0.082255, 0.9329, -0.3135, -0.1774,
+-0.105592, 0.186814, -0.107362, 0.716725, 0.075013, 0.9329, -0.3135, -0.1774,
+-0.098092, 0.207583, -0.104626, 0.706397, 0.089989, 0.9329, -0.3135, -0.1774,
+-0.128092, 0.234285, -0.079572, 0.732369, 0.601095, -1, 0, 0,
+-0.128092, 0.192117, -0.077302, 0.723913, 0.56393, -1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.704438, 0.605888, -1, 0, 0,
+0.098092, 0.234285, -0.079572, 0.718335, 0.110798, -1, 0, 0,
+0.098092, 0.192117, -0.077302, 0.730783, 0.082228, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.745617, 0.117066, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.745617, 0.117066, 0, -0.5684, 0.8228,
+0.128092, 0.192117, -0.077302, 0.745767, 0.066489, 0, -0.5684, 0.8228,
+0.128092, 0.234285, -0.048174, 0.769253, 0.105121, 0, -0.5684, 0.8228,
+0.128092, 0.234285, -0.079572, 0.732243, 0.60187, 1, 0, 0,
+0.128092, 0.192117, -0.077302, 0.723788, 0.564705, 1, 0, 0,
+0.128092, 0.207583, -0.104626, 0.750455, 0.574292, 1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.769255, 0.105132, 0, -0.5684, 0.8228,
+-0.098092, 0.192117, -0.077302, 0.730769, 0.082255, 0, -0.5684, 0.8228,
+-0.098092, 0.234285, -0.048174, 0.745628, 0.117077, 0, -0.5684, 0.8228,
+-0.098092, 0.234285, -0.079572, 0.718318, 0.110819, 1, 0, 0,
+-0.098092, 0.192117, -0.077302, 0.730769, 0.082255, 1, 0, 0,
+-0.098092, 0.207583, -0.104626, 0.706397, 0.089989, 1, 0, 0,
+-0.105592, 0.179081, -0.0937, 0.723585, 0.072741, 0, -0.8703, -0.4926,
+-0.120592, 0.186814, -0.107362, 0.708355, 0.063063, 0, -0.8703, -0.4926,
+-0.105592, 0.186814, -0.107362, 0.716725, 0.075013, 0, -0.8703, -0.4926,
+0.105592, 0.186814, -0.107362, 0.716731, 0.075033, 0, -0.8703, -0.4926,
+0.120592, 0.179081, -0.0937, 0.719794, 0.061995, 0, -0.8703, -0.4926,
+0.105592, 0.179081, -0.0937, 0.723592, 0.072791, 0, -0.8703, -0.4926,
+-0.098092, 0.207583, -0.104626, 0.706397, 0.089989, 0, 0.1306, -0.9914,
+-0.120592, 0.186814, -0.107362, 0.708355, 0.063063, 0, 0.1306, -0.9914,
+-0.128092, 0.207583, -0.104626, 0.685736, 0.083383, 0, 0.1306, -0.9914,
+-0.128092, 0.192117, -0.077302, 0.723913, 0.56393, -0.9329, -0.3135, -0.1774,
+-0.120592, 0.186814, -0.107362, 0.750271, 0.553437, -0.9329, -0.3135, -0.1774,
+-0.120592, 0.179081, -0.0937, 0.736937, 0.548643, -0.9329, -0.3135, -0.1774,
+0.098092, 0.192117, -0.077302, 0.730783, 0.082228, -0.9329, -0.3135, -0.1774,
+0.105592, 0.186814, -0.107362, 0.716731, 0.075033, -0.9329, -0.3135, -0.1774,
+0.105592, 0.179081, -0.0937, 0.723592, 0.072791, -0.9329, -0.3135, -0.1774,
+0.098092, 0.192117, -0.077302, 0.730783, 0.082228, 0, -0.7828, 0.6223,
+0.120592, 0.179081, -0.0937, 0.719794, 0.061995, 0, -0.7828, 0.6223,
+0.128092, 0.192117, -0.077302, 0.745767, 0.066489, 0, -0.7828, 0.6223,
+0.128092, 0.192117, -0.077302, 0.723788, 0.564705, 0.9329, -0.3135, -0.1774,
+0.120592, 0.186814, -0.107362, 0.750146, 0.554212, 0.9329, -0.3135, -0.1774,
+0.128092, 0.207583, -0.104626, 0.750455, 0.574292, 0.9329, -0.3135, -0.1774,
+-0.098092, 0.192117, -0.077302, 0.730769, 0.082255, 0, -0.7828, 0.6223,
+-0.120592, 0.179081, -0.0937, 0.719785, 0.061964, 0, -0.7828, 0.6223,
+-0.105592, 0.179081, -0.0937, 0.723585, 0.072741, 0, -0.7828, 0.6223,
+-0.1, 0.1, -0.1, 0.361776, 0.180764, 0, 0.2651, -0.9642,
+-0.03964, 0.319577, -0.03964, 0.307296, 0.386301, 0, 0.2651, -0.9642,
+0.03964, 0.319577, -0.03964, 0.23574, 0.386301, 0, 0.2651, -0.9642,
+0.1, 0.1, 0.1, 0.180764, 0.361279, 0, 0, 1,
+-0.1, 0.1, 0.1, 0.000248, 0.361279, 0, 0, 1,
+-0.1, -0.1, 0.1, 0.000248, 0.180764, 0, 0, 1,
+-0.1, 0.1, 0.1, 0.36905, 0.183648, -1, 0, 0,
+-0.1, 0.1, -0.1, 0.552126, 0.183647, -1, 0, 0,
+-0.1, -0.1, -0.1, 0.552126, 0.00057, -1, 0, 0,
+0.1, -0.1, -0.1, 0.180764, 0.000248, 0, -1, 0,
+0.1, -0.1, 0.1, 0.180764, 0.180764, 0, -1, 0,
+-0.1, -0.1, 0.1, 0.000248, 0.180764, 0, -1, 0,
+0.1, 0.1, -0.1, 0.36907, 0.183679, 1, 0, 0,
+0.1, 0.1, 0.1, 0.552146, 0.183678, 1, 0, 0,
+0.1, -0.1, 0.1, 0.552146, 0.000601, 1, 0, 0,
+-0.1, 0.1, -0.1, 0.361776, 0.180764, 0, 0, -1,
+0.1, 0.1, -0.1, 0.18126, 0.180764, 0, 0, -1,
+0.1, -0.1, -0.1, 0.18126, 0.000248, 0, 0, -1,
+-0.03964, 0.319577, 0.03964, 0.42431, 0.392101, -0.9781, -0.2081, 0,
+-0.070778, 0.465943, 0.070778, 0.39582, 0.529055, -0.9781, -0.2081, 0,
+-0.070778, 0.465943, -0.070778, 0.525368, 0.529051, -0.9781, -0.2081, 0,
+0.1, 0.1, 0.1, 0.180764, 0.361279, 0, 0.2651, 0.9642,
+0.03964, 0.319577, 0.03964, 0.126284, 0.566817, 0, 0.2651, 0.9642,
+-0.03964, 0.319577, 0.03964, 0.054728, 0.566817, 0, 0.2651, 0.9642,
+-0.1, 0.1, 0.1, 0.36905, 0.183648, -0.9642, 0.2651, 0,
+-0.03964, 0.319577, 0.03964, 0.42431, 0.392101, -0.9642, 0.2651, 0,
+-0.03964, 0.319577, -0.03964, 0.496874, 0.392099, -0.9642, 0.2651, 0,
+0.1, 0.1, -0.1, 0.36907, 0.183679, 0.9642, 0.2651, 0,
+0.03964, 0.319577, -0.03964, 0.424331, 0.392131, 0.9642, 0.2651, 0,
+0.03964, 0.319577, 0.03964, 0.496894, 0.39213, 0.9642, 0.2651, 0,
+-0.070778, 0.465943, -0.070778, 0.3354, 0.521364, 0, 0, -1,
+-0.070778, 0.574785, -0.070778, 0.3354, 0.619603, 0, 0, -1,
+0.070778, 0.574785, -0.070778, 0.207635, 0.619603, 0, 0, -1,
+0.03964, 0.319577, 0.03964, 0.126284, 0.566817, 0, -0.2081, 0.9781,
+0.070778, 0.465943, 0.070778, 0.154389, 0.70188, 0, -0.2081, 0.9781,
+-0.070778, 0.465943, 0.070778, 0.026623, 0.70188, 0, -0.2081, 0.9781,
+-0.03964, 0.319577, -0.03964, 0.307296, 0.386301, 0, -0.2081, -0.9781,
+-0.070778, 0.465943, -0.070778, 0.3354, 0.521364, 0, -0.2081, -0.9781,
+0.070778, 0.465943, -0.070778, 0.207635, 0.521364, 0, -0.2081, -0.9781,
+0.03964, 0.319577, -0.03964, 0.424331, 0.392131, 0.9781, -0.2081, 0,
+0.070778, 0.465943, -0.070778, 0.39584, 0.529085, 0.9781, -0.2081, 0,
+0.070778, 0.465943, 0.070778, 0.525388, 0.529082, 0.9781, -0.2081, 0,
+-0.070778, 0.574785, 0.070778, 0.394883, 0.635328, -0.6461, 0.7632, 0,
+-0.036361, 0.603924, 0.036361, 0.426377, 0.676595, -0.6461, 0.7632, 0,
+-0.036361, 0.603924, -0.036361, 0.492928, 0.676593, -0.6461, 0.7632, 0,
+0.070778, 0.465943, 0.070778, 0.525388, 0.529082, 0.7408, 0, 0.6717,
+0.098092, 0.489106, 0.040654, 0.490002, 0.556727, 0.7408, 0, 0.6717,
+0.098092, 0.551623, 0.040654, 0.492176, 0.604967, 0.7408, 0, 0.6717,
+-0.070778, 0.465943, -0.070778, 0.525368, 0.529051, -0.7408, 0, -0.6717,
+-0.098092, 0.489106, -0.040654, 0.489982, 0.556697, -0.7408, 0, -0.6717,
+-0.098092, 0.551623, -0.040654, 0.492156, 0.604936, -0.7408, 0, -0.6717,
+0.070778, 0.465943, 0.070778, 0.154389, 0.70188, 0, 0, 1,
+0.070778, 0.574785, 0.070778, 0.154388, 0.800118, 0, 0, 1,
+-0.070778, 0.574785, 0.070778, 0.026623, 0.800118, 0, 0, 1,
+0.036361, 0.603924, 0.036361, 0.123324, 0.84082, 0, 0, 1,
+0.036361, 0.622896, 0.036361, 0.123324, 0.857945, 0, 0, 1,
+-0.036361, 0.622896, 0.036361, 0.057687, 0.857945, 0, 0, 1,
+0.070778, 0.574785, 0.070778, 0.154388, 0.800118, 0, 0.7632, 0.6461,
+0.036361, 0.603924, 0.036361, 0.123324, 0.84082, 0, 0.7632, 0.6461,
+-0.036361, 0.603924, 0.036361, 0.057687, 0.84082, 0, 0.7632, 0.6461,
+-0.070778, 0.574785, -0.070778, 0.3354, 0.619603, 0, 0.7632, -0.6461,
+-0.036361, 0.603924, -0.036361, 0.304336, 0.660305, 0, 0.7632, -0.6461,
+0.036361, 0.603924, -0.036361, 0.238699, 0.660305, 0, 0.7632, -0.6461,
+0.070778, 0.574785, -0.070778, 0.394903, 0.635358, 0.6461, 0.7632, 0,
+0.036361, 0.603924, -0.036361, 0.426397, 0.676626, 0.6461, 0.7632, 0,
+0.036361, 0.603924, 0.036361, 0.492948, 0.676623, 0.6461, 0.7632, 0,
+-0.036361, 0.622896, -0.036361, 0.304336, 0.677429, 0, -0.6177, -0.7864,
+-0.052774, 0.643794, -0.052774, 0.319151, 0.701413, 0, -0.6177, -0.7864,
+0.052774, 0.643794, -0.052774, 0.223885, 0.701413, 0, -0.6177, -0.7864,
+-0.036361, 0.603924, -0.036361, 0.304336, 0.660305, 0, 0, -1,
+-0.036361, 0.622896, -0.036361, 0.304336, 0.677429, 0, 0, -1,
+0.036361, 0.622896, -0.036361, 0.238699, 0.677429, 0, 0, -1,
+0.036361, 0.603924, -0.036361, 0.426397, 0.676626, 1, 0, 0,
+0.036361, 0.622896, -0.036361, 0.426395, 0.69399, 1, 0, 0,
+0.036361, 0.622896, 0.036361, 0.492952, 0.693988, 1, 0, 0,
+-0.036361, 0.603924, 0.036361, 0.426377, 0.676595, -1, 0, 0,
+-0.036361, 0.622896, 0.036361, 0.426375, 0.693959, -1, 0, 0,
+-0.036361, 0.622896, -0.036361, 0.492931, 0.693957, -1, 0, 0,
+-0.052774, 0.643794, 0.052774, 0.41135, 0.718281, -0.9976, -0.0692, 0,
+-0.058197, 0.722006, 0.058197, 0.406388, 0.790041, -0.9976, -0.0692, 0,
+-0.058197, 0.722006, -0.058197, 0.512924, 0.790039, -0.9976, -0.0692, 0,
+0.036361, 0.622896, -0.036361, 0.426395, 0.69399, 0.7864, -0.6177, 0,
+0.052774, 0.643794, -0.052774, 0.411371, 0.718312, 0.7864, -0.6177, 0,
+0.052774, 0.643794, 0.052774, 0.507978, 0.71831, 0.7864, -0.6177, 0,
+-0.036361, 0.622896, 0.036361, 0.426375, 0.693959, -0.7864, -0.6177, 0,
+-0.052774, 0.643794, 0.052774, 0.41135, 0.718281, -0.7864, -0.6177, 0,
+-0.052774, 0.643794, -0.052774, 0.507958, 0.718279, -0.7864, -0.6177, 0,
+0.036361, 0.622896, 0.036361, 0.123324, 0.857945, 0, -0.6177, 0.7864,
+0.052774, 0.643794, 0.052774, 0.138139, 0.881929, 0, -0.6177, 0.7864,
+-0.052774, 0.643794, 0.052774, 0.042873, 0.881929, 0, -0.6177, 0.7864,
+-0.058197, 0.722006, -0.058197, 0.324045, 0.772175, 0, 0.5681, -0.8229,
+-0.028575, 0.764915, -0.028575, 0.297309, 0.819236, 0, 0.5681, -0.8229,
+0.028575, 0.764915, -0.028575, 0.245726, 0.819236, 0, 0.5681, -0.8229,
+0.052774, 0.643794, 0.052774, 0.138139, 0.881929, 0, -0.0692, 0.9976,
+0.058197, 0.722006, 0.058197, 0.143033, 0.952691, 0, -0.0692, 0.9976,
+-0.058197, 0.722006, 0.058197, 0.037978, 0.952691, 0, -0.0692, 0.9976,
+-0.052774, 0.643794, -0.052774, 0.319151, 0.701413, 0, -0.0692, -0.9976,
+-0.058197, 0.722006, -0.058197, 0.324045, 0.772175, 0, -0.0692, -0.9976,
+0.058197, 0.722006, -0.058197, 0.21899, 0.772175, 0, -0.0692, -0.9976,
+0.052774, 0.643794, -0.052774, 0.411371, 0.718312, 0.9976, -0.0692, 0,
+0.058197, 0.722006, -0.058197, 0.406408, 0.790072, 0.9976, -0.0692, 0,
+0.058197, 0.722006, 0.058197, 0.512944, 0.79007, 0.9976, -0.0692, 0,
+-0.028575, 0.764915, -0.028575, 0.297309, 0.819236, 0, 1, 0,
+-0.028575, 0.764915, 0.028575, 0.297309, 0.870819, 0, 1, 0,
+0.028575, 0.764915, 0.028575, 0.245726, 0.870819, 0, 1, 0,
+0.058197, 0.722006, -0.058197, 0.406408, 0.790072, 0.8229, 0.5681, 0,
+0.028575, 0.764915, -0.028575, 0.433522, 0.837797, 0.8229, 0.5681, 0,
+0.028575, 0.764915, 0.028575, 0.485832, 0.837796, 0.8229, 0.5681, 0,
+-0.058197, 0.722006, 0.058197, 0.406388, 0.790041, -0.8229, 0.5681, 0,
+-0.028575, 0.764915, 0.028575, 0.433502, 0.837766, -0.8229, 0.5681, 0,
+-0.028575, 0.764915, -0.028575, 0.485812, 0.837765, -0.8229, 0.5681, 0,
+0.058197, 0.722006, 0.058197, 0.143033, 0.952691, 0, 0.5681, 0.8229,
+0.028575, 0.764915, 0.028575, 0.116297, 0.999752, 0, 0.5681, 0.8229,
+-0.028575, 0.764915, 0.028575, 0.064714, 0.999752, 0, 0.5681, 0.8229,
+0.098092, 0.551623, -0.040654, 0.71393, 0.424338, 0, 0, -1,
+0.128092, 0.551623, -0.040654, 0.684273, 0.419554, 0, 0, -1,
+0.128092, 0.489106, -0.040654, 0.694279, 0.357676, 0, 0, -1,
+0.070778, 0.465943, -0.070778, 0.39584, 0.529085, 0.6468, -0.7627, 0,
+0.098092, 0.489106, -0.040654, 0.428108, 0.559472, 0.6468, -0.7627, 0,
+0.098092, 0.489106, 0.040654, 0.490002, 0.556727, 0.6468, -0.7627, 0,
+0.070778, 0.574785, -0.070778, 0.394903, 0.635358, 0.7408, 0, -0.6717,
+0.098092, 0.551623, -0.040654, 0.430285, 0.607712, 0.7408, 0, -0.6717,
+0.098092, 0.489106, -0.040654, 0.428108, 0.559472, 0.7408, 0, -0.6717,
+0.070778, 0.574785, 0.070778, 0.52444, 0.635354, 0.6468, 0.7627, 0,
+0.098092, 0.551623, 0.040654, 0.492176, 0.604967, 0.6468, 0.7627, 0,
+0.098092, 0.551623, -0.040654, 0.430285, 0.607712, 0.6468, 0.7627, 0,
+-0.098092, 0.551623, 0.040654, 0.805257, 0.424346, 0, 0, 1,
+-0.128092, 0.551623, 0.040654, 0.834065, 0.419805, 0, 0, 1,
+-0.128092, 0.489106, 0.040654, 0.824602, 0.359773, 0, 0, 1,
+-0.070778, 0.574785, -0.070778, 0.52442, 0.635324, -0.6468, 0.7627, 0,
+-0.098092, 0.551623, -0.040654, 0.492156, 0.604936, -0.6468, 0.7627, 0,
+-0.098092, 0.551623, 0.040654, 0.430265, 0.607682, -0.6468, 0.7627, 0,
+-0.070778, 0.574785, 0.070778, 0.394883, 0.635328, -0.7408, 0, 0.6717,
+-0.098092, 0.551623, 0.040654, 0.430265, 0.607682, -0.7408, 0, 0.6717,
+-0.098092, 0.489106, 0.040654, 0.428088, 0.559442, -0.7408, 0, 0.6717,
+-0.070778, 0.465943, 0.070778, 0.39582, 0.529055, -0.6468, -0.7627, 0,
+-0.098092, 0.489106, 0.040654, 0.428088, 0.559442, -0.6468, -0.7627, 0,
+-0.098092, 0.489106, -0.040654, 0.489982, 0.556697, -0.6468, -0.7627, 0,
+-0.128092, 0.489106, 0.040654, 0.664224, 0.846564, -1, 0, 0,
+-0.128092, 0.551623, 0.040654, 0.673692, 0.90219, -1, 0, 0,
+-0.128092, 0.551623, -0.040654, 0.746037, 0.889876, -1, 0, 0,
+-0.098092, 0.551623, -0.040654, 0.750581, 0.916569, 0, 1, 0,
+-0.128092, 0.551623, -0.040654, 0.746037, 0.889876, 0, 1, 0,
+-0.128092, 0.551623, 0.040654, 0.673692, 0.90219, 0, 1, 0,
+-0.098092, 0.489106, -0.040654, 0.723967, 0.362496, 0, 0, -1,
+-0.128092, 0.489106, -0.040654, 0.694287, 0.357682, 0, 0, -1,
+-0.128092, 0.551623, -0.040654, 0.684255, 0.419532, 0, 0, -1,
+0.098092, 0.489106, -0.040654, 0.723983, 0.362427, -0.9978, -0.0665, 0,
+0.103989, 0.400565, -0.024672, 0.732661, 0.271717, -0.9978, -0.0665, 0,
+0.103989, 0.400565, 0.024672, 0.786539, 0.271717, -0.9978, -0.0665, 0,
+0.128092, 0.489106, -0.040654, 0.736444, 0.835025, 1, 0, 0,
+0.128092, 0.551623, -0.040654, 0.745912, 0.890651, 1, 0, 0,
+0.128092, 0.551623, 0.040654, 0.673566, 0.902965, 1, 0, 0,
+0.128092, 0.489106, 0.040654, 0.664098, 0.847339, 0.9978, -0.0665, 0,
+0.122195, 0.400565, 0.024672, 0.664879, 0.765962, 0.9978, -0.0665, 0,
+0.122195, 0.400565, -0.024672, 0.708784, 0.758489, 0.9978, -0.0665, 0,
+0.098092, 0.489106, 0.040654, 0.795802, 0.364322, 0, 0, 1,
+0.128092, 0.489106, 0.040654, 0.824644, 0.359803, 0, 0, 1,
+0.128092, 0.551623, 0.040654, 0.834068, 0.419902, 0, 0, 1,
+0.098092, 0.551623, 0.040654, 0.67811, 0.929659, 0, 1, 0,
+0.128092, 0.551623, 0.040654, 0.673566, 0.902965, 0, 1, 0,
+0.128092, 0.551623, -0.040654, 0.745912, 0.890651, 0, 1, 0,
+-0.122195, 0.400565, 0.024672, 0.80532, 0.271717, 0, 0.239, 0.971,
+-0.128092, 0.335624, 0.040654, 0.818563, 0.217058, 0, 0.239, 0.971,
+-0.098092, 0.335624, 0.040654, 0.79317, 0.22111, 0, 0.239, 0.971,
+0.122195, 0.400565, 0.024672, 0.664879, 0.765962, 0.9952, 0.0956, 0.0214,
+0.128092, 0.335624, 0.040654, 0.640762, 0.710371, 0.9952, 0.0956, 0.0214,
+0.128092, 0.353791, -0.040654, 0.715864, 0.71412, 0.9952, 0.0956, 0.0214,
+0.098092, 0.489106, -0.040654, 0.723983, 0.362427, 0, -0.1776, -0.9841,
+0.128092, 0.489106, -0.040654, 0.694279, 0.357676, 0, -0.1776, -0.9841,
+0.122195, 0.400565, -0.024672, 0.714546, 0.271717, 0, -0.1776, -0.9841,
+-0.128092, 0.489106, -0.040654, 0.736569, 0.83425, -0.9978, -0.0665, 0,
+-0.122195, 0.400565, -0.024672, 0.70891, 0.757714, -0.9978, -0.0665, 0,
+-0.122195, 0.400565, 0.024672, 0.665005, 0.765187, -0.9978, -0.0665, 0,
+-0.098092, 0.489106, -0.040654, 0.723967, 0.362496, 0, -0.1776, -0.9841,
+-0.103989, 0.400565, -0.024672, 0.732728, 0.271717, 0, -0.1776, -0.9841,
+-0.122195, 0.400565, -0.024672, 0.714559, 0.271717, 0, -0.1776, -0.9841,
+-0.098092, 0.489106, 0.040654, 0.795794, 0.364314, 0, -0.1776, 0.9841,
+-0.128092, 0.489106, 0.040654, 0.824602, 0.359773, 0, -0.1776, 0.9841,
+-0.122195, 0.400565, 0.024672, 0.80532, 0.271717, 0, -0.1776, 0.9841,
+0.098092, 0.489106, 0.040654, 0.795802, 0.364322, 0, -0.1776, 0.9841,
+0.103989, 0.400565, 0.024672, 0.786539, 0.271717, 0, -0.1776, 0.9841,
+0.122195, 0.400565, 0.024672, 0.805282, 0.271717, 0, -0.1776, 0.9841,
+-0.098092, 0.489106, 0.040654, 0.795794, 0.364314, 0.9978, -0.0665, 0,
+-0.103989, 0.400565, 0.024672, 0.786556, 0.271717, 0.9978, -0.0665, 0,
+-0.103989, 0.400565, -0.024672, 0.732728, 0.271717, 0.9978, -0.0665, 0,
+0.098092, 0.335624, 0.040654, 0.79313, 0.221103, 0, -0.6592, 0.752,
+0.098092, 0.234285, -0.048174, 0.745617, 0.117066, 0, -0.6592, 0.752,
+0.128092, 0.234285, -0.048174, 0.769253, 0.105121, 0, -0.6592, 0.752,
+0.098092, 0.353791, -0.040654, 0.729794, 0.227227, -1, 0, 0,
+0.098092, 0.234285, -0.079572, 0.718335, 0.110798, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.745617, 0.117066, -1, 0, 0,
+-0.103989, 0.400565, 0.024672, 0.786556, 0.271717, 0.9952, 0.0956, 0.0214,
+-0.098092, 0.335624, 0.040654, 0.79317, 0.22111, 0.9952, 0.0956, 0.0214,
+-0.098092, 0.353791, -0.040654, 0.729795, 0.227223, 0.9952, 0.0956, 0.0214,
+0.122195, 0.400565, -0.024672, 0.714546, 0.271717, 0, 0.3233, -0.9463,
+0.128092, 0.353791, -0.040654, 0.703207, 0.231088, 0, 0.3233, -0.9463,
+0.098092, 0.353791, -0.040654, 0.729794, 0.227227, 0, 0.3233, -0.9463,
+-0.122195, 0.400565, -0.024672, 0.714559, 0.271717, 0, 0.3233, -0.9463,
+-0.103989, 0.400565, -0.024672, 0.732728, 0.271717, 0, 0.3233, -0.9463,
+-0.098092, 0.353791, -0.040654, 0.729795, 0.227223, 0, 0.3233, -0.9463,
+-0.122195, 0.400565, 0.024672, 0.665005, 0.765187, -0.9921, 0.1251, 0,
+-0.122195, 0.400565, -0.024672, 0.70891, 0.757714, -0.9921, 0.1251, 0,
+-0.128092, 0.353791, -0.040654, 0.71599, 0.713345, -0.9921, 0.1251, 0,
+0.103989, 0.400565, 0.024672, 0.786539, 0.271717, -0.9921, 0.1251, 0,
+0.103989, 0.400565, -0.024672, 0.732661, 0.271717, -0.9921, 0.1251, 0,
+0.098092, 0.353791, -0.040654, 0.729794, 0.227227, -0.9921, 0.1251, 0,
+0.103989, 0.400565, 0.024672, 0.786539, 0.271717, 0, 0.239, 0.971,
+0.098092, 0.335624, 0.040654, 0.79313, 0.221103, 0, 0.239, 0.971,
+0.128092, 0.335624, 0.040654, 0.818474, 0.217189, 0, 0.239, 0.971,
+-0.098092, 0.234285, -0.079572, 0.718318, 0.110819, 0, 0.6843, -0.7292,
+-0.098092, 0.207583, -0.104626, 0.706397, 0.089989, 0, 0.6843, -0.7292,
+-0.128092, 0.207583, -0.104626, 0.685736, 0.083383, 0, 0.6843, -0.7292,
+0.128092, 0.234285, -0.079572, 0.684224, 0.118316, 0, 0.6843, -0.7292,
+0.128092, 0.207583, -0.104626, 0.68581, 0.083269, 0, 0.6843, -0.7292,
+0.098092, 0.207583, -0.104626, 0.706537, 0.090094, 0, 0.6843, -0.7292,
+0.128092, 0.353791, -0.040654, 0.715864, 0.71412, 1, 0, 0,
+0.128092, 0.335624, 0.040654, 0.640762, 0.710371, 1, 0, 0,
+0.128092, 0.234285, -0.048174, 0.704313, 0.606663, 1, 0, 0,
+-0.128092, 0.335624, 0.040654, 0.818563, 0.217058, 0, -0.6592, 0.752,
+-0.128092, 0.234285, -0.048174, 0.769255, 0.105132, 0, -0.6592, 0.752,
+-0.098092, 0.234285, -0.048174, 0.745628, 0.117077, 0, -0.6592, 0.752,
+-0.098092, 0.353791, -0.040654, 0.729795, 0.227223, 1, 0, 0,
+-0.098092, 0.335624, 0.040654, 0.79317, 0.22111, 1, 0, 0,
+-0.098092, 0.234285, -0.048174, 0.745628, 0.117077, 1, 0, 0,
+0.128092, 0.353791, -0.040654, 0.703207, 0.231088, 0, 0.3097, -0.9508,
+0.128092, 0.234285, -0.079572, 0.684224, 0.118316, 0, 0.3097, -0.9508,
+0.098092, 0.234285, -0.079572, 0.718335, 0.110798, 0, 0.3097, -0.9508,
+-0.098092, 0.353791, -0.040654, 0.729795, 0.227223, 0, 0.3097, -0.9508,
+-0.098092, 0.234285, -0.079572, 0.718318, 0.110819, 0, 0.3097, -0.9508,
+-0.128092, 0.234285, -0.079572, 0.684225, 0.118309, 0, 0.3097, -0.9508,
+-0.128092, 0.353791, -0.040654, 0.71599, 0.713345, -1, 0, 0,
+-0.128092, 0.234285, -0.079572, 0.732369, 0.601095, -1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.704438, 0.605888, -1, 0, 0,
+0.098092, 0.207583, -0.104626, 0.706537, 0.090094, 0, 0.1306, -0.9914,
+0.128092, 0.207583, -0.104626, 0.68581, 0.083269, 0, 0.1306, -0.9914,
+0.120592, 0.186814, -0.107362, 0.708302, 0.063056, 0, 0.1306, -0.9914,
+-0.098092, 0.192117, -0.077302, 0.730769, 0.082255, 0.9329, -0.3135, -0.1774,
+-0.105592, 0.179081, -0.0937, 0.723585, 0.072741, 0.9329, -0.3135, -0.1774,
+-0.105592, 0.186814, -0.107362, 0.716725, 0.075013, 0.9329, -0.3135, -0.1774,
+-0.128092, 0.234285, -0.079572, 0.732369, 0.601095, -1, 0, 0,
+-0.128092, 0.207583, -0.104626, 0.750581, 0.573517, -1, 0, 0,
+-0.128092, 0.192117, -0.077302, 0.723913, 0.56393, -1, 0, 0,
+0.098092, 0.234285, -0.079572, 0.718335, 0.110798, -1, 0, 0,
+0.098092, 0.207583, -0.104626, 0.706537, 0.090094, -1, 0, 0,
+0.098092, 0.192117, -0.077302, 0.730783, 0.082228, -1, 0, 0,
+0.098092, 0.234285, -0.048174, 0.745617, 0.117066, 0, -0.5684, 0.8228,
+0.098092, 0.192117, -0.077302, 0.730783, 0.082228, 0, -0.5684, 0.8228,
+0.128092, 0.192117, -0.077302, 0.745767, 0.066489, 0, -0.5684, 0.8228,
+0.128092, 0.234285, -0.079572, 0.732243, 0.60187, 1, 0, 0,
+0.128092, 0.234285, -0.048174, 0.704313, 0.606663, 1, 0, 0,
+0.128092, 0.192117, -0.077302, 0.723788, 0.564705, 1, 0, 0,
+-0.128092, 0.234285, -0.048174, 0.769255, 0.105132, 0, -0.5684, 0.8228,
+-0.128092, 0.192117, -0.077302, 0.745754, 0.06649, 0, -0.5684, 0.8228,
+-0.098092, 0.192117, -0.077302, 0.730769, 0.082255, 0, -0.5684, 0.8228,
+-0.098092, 0.234285, -0.079572, 0.718318, 0.110819, 1, 0, 0,
+-0.098092, 0.234285, -0.048174, 0.745628, 0.117077, 1, 0, 0,
+-0.098092, 0.192117, -0.077302, 0.730769, 0.082255, 1, 0, 0,
+-0.105592, 0.179081, -0.0937, 0.723585, 0.072741, 0, -0.8703, -0.4926,
+-0.120592, 0.179081, -0.0937, 0.719785, 0.061964, 0, -0.8703, -0.4926,
+-0.120592, 0.186814, -0.107362, 0.708355, 0.063063, 0, -0.8703, -0.4926,
+0.105592, 0.186814, -0.107362, 0.716731, 0.075033, 0, -0.8703, -0.4926,
+0.120592, 0.186814, -0.107362, 0.708302, 0.063056, 0, -0.8703, -0.4926,
+0.120592, 0.179081, -0.0937, 0.719794, 0.061995, 0, -0.8703, -0.4926,
+-0.098092, 0.207583, -0.104626, 0.706397, 0.089989, 0, 0.1306, -0.9914,
+-0.105592, 0.186814, -0.107362, 0.716725, 0.075013, 0, 0.1306, -0.9914,
+-0.120592, 0.186814, -0.107362, 0.708355, 0.063063, 0, 0.1306, -0.9914,
+-0.128092, 0.192117, -0.077302, 0.723913, 0.56393, -0.9329, -0.3135, -0.1774,
+-0.128092, 0.207583, -0.104626, 0.750581, 0.573517, -0.9329, -0.3135, -0.1774,
+-0.120592, 0.186814, -0.107362, 0.750271, 0.553437, -0.9329, -0.3135, -0.1774,
+0.098092, 0.192117, -0.077302, 0.730783, 0.082228, -0.9329, -0.3135, -0.1774,
+0.098092, 0.207583, -0.104626, 0.706537, 0.090094, -0.9329, -0.3135, -0.1774,
+0.105592, 0.186814, -0.107362, 0.716731, 0.075033, -0.9329, -0.3135, -0.1774,
+0.098092, 0.192117, -0.077302, 0.730783, 0.082228, 0, -0.7828, 0.6223,
+0.105592, 0.179081, -0.0937, 0.723592, 0.072791, 0, -0.7828, 0.6223,
+0.120592, 0.179081, -0.0937, 0.719794, 0.061995, 0, -0.7828, 0.6223,
+0.128092, 0.192117, -0.077302, 0.723788, 0.564705, 0.9329, -0.3135, -0.1774,
+0.120592, 0.179081, -0.0937, 0.736812, 0.549418, 0.9329, -0.3135, -0.1774,
+0.120592, 0.186814, -0.107362, 0.750146, 0.554212, 0.9329, -0.3135, -0.1774,
+-0.098092, 0.192117, -0.077302, 0.730769, 0.082255, 0, -0.7828, 0.6223,
+-0.128092, 0.192117, -0.077302, 0.745754, 0.06649, 0, -0.7828, 0.6223,
+-0.120592, 0.179081, -0.0937, 0.719785, 0.061964, 0, -0.7828, 0.6223,
+];
+
+objArray.push(RobotTex_data);
+
+
+groupArray.push(
+ new VertGroup(
+ 0, // material number
+ 0, // object number
+ 0, // starting face
+ 564, // length
+ )
+);
diff --git a/aswebglue/examples/TextureModel/RobotTexPixel.png b/aswebglue/examples/TextureModel/RobotTexPixel.png
new file mode 100644
index 0000000..d3acda6
Binary files /dev/null and b/aswebglue/examples/TextureModel/RobotTexPixel.png differ
diff --git a/aswebglue/examples/TextureModel/index.html b/aswebglue/examples/TextureModel/index.html
new file mode 100644
index 0000000..b36926d
--- /dev/null
+++ b/aswebglue/examples/TextureModel/index.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+ Textured Wavefront Object converted to AssemblyScript
+
+
+
+ fps:
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/TextureModel/obj_tex.ts b/aswebglue/examples/TextureModel/obj_tex.ts
new file mode 100644
index 0000000..8933527
--- /dev/null
+++ b/aswebglue/examples/TextureModel/obj_tex.ts
@@ -0,0 +1,171 @@
+/**
+ * @author Rick Battagline / https://embed.com/wasm
+ */
+
+import {
+ WebGLRenderingContext,
+ WebGLShader,
+ ImageData,
+ WebGLUniformLocation,
+ WebGLBuffer,
+ GLint,
+ WebGLProgram,
+ WebGLTexture,
+} from '../../WebGL';
+
+import {objArray, matArray, groupArray, VertGroup, matMapArray, MaterialMap} from './RobotTex';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision mediump float;
+
+ in vec3 position;
+ in vec2 tex_uv;
+ in vec3 normal;
+ uniform vec3 diffuse;
+
+ out vec2 tc;
+ out vec4 c;
+
+ void main() {
+ const vec3 light = vec3(0.25, 2.0, -0.5);
+ float d = clamp( dot( normal, light ), 0.0, 1.0);
+ vec4 pos = vec4( position, 1.0 );
+
+ mat4 mRotateTranslate = mat4(
+ 1.0, 0.0, 0.0, 0.0, // column 1
+ 0.0, cos(-0.2),-sin(-0.2), -0.2, // column 2
+ 0.0, sin(-0.0), cos(-0.2), 0.0, // column 3
+ 0.0, 0.0, 0.0, 1.0 // column 4
+ );
+
+ gl_Position = pos * mRotateTranslate;
+ tc = tex_uv;
+ c = vec4( d + diffuse.r,
+ d + diffuse.g,
+ d + diffuse.b, 1.0);
+ }
+`;
+
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ in vec2 tc;
+ out vec4 color;
+ uniform sampler2D sampler;
+
+ void main() {
+ color = texture( sampler, tc ) * c;
+ }
+`;
+
+// initialize webgl
+var gl: WebGLRenderingContext = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let tex_uv_al: GLint = gl.getAttribLocation(program, 'tex_uv');
+gl.enableVertexAttribArray(tex_uv_al);
+
+let normal_al: GLint = gl.getAttribLocation(program, 'normal');
+gl.enableVertexAttribArray(normal_al);
+
+let diffuse: WebGLUniformLocation = gl.getUniformLocation(program, 'diffuse');
+
+let texture: WebGLTexture = gl.createTexture();
+let sampler: WebGLUniformLocation = gl.getUniformLocation(program, 'sampler');
+
+var image_id: ImageData = gl.createImage(matMapArray[0].diffuse);
+var image_ready: bool = false;
+
+//diffuse
+gl.enable(gl.DEPTH_TEST);
+
+function rotate(theta: f32): void {
+ //u32 {
+ for (var obj_i: i32 = 0; obj_i < objArray.length; obj_i++) {
+ for (var coord_i: i32 = 0; coord_i < objArray[obj_i].length; coord_i += 8) {
+ let x: f32 = objArray[obj_i][coord_i];
+ let z: f32 = objArray[obj_i][coord_i + 2];
+
+ let nx: f32 = objArray[obj_i][coord_i + 5];
+ let nz: f32 = objArray[obj_i][coord_i + 7];
+
+ let x1: f32 = x * Mathf.cos(theta) - z * Mathf.sin(theta);
+ let z1: f32 = z * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ let nx1: f32 = nx * Mathf.cos(theta) - nz * Mathf.sin(theta);
+ let nz1: f32 = nz * Mathf.cos(theta) + nx * Mathf.sin(theta);
+
+ objArray[obj_i][coord_i] = x1;
+ objArray[obj_i][coord_i + 2] = z1;
+
+ objArray[obj_i][coord_i + 5] = nx1;
+ objArray[obj_i][coord_i + 7] = nz1;
+ }
+ }
+
+ return;
+}
+
+var vGroup: VertGroup;
+export function displayLoop(delta: i32): void {
+ let r: f32 = delta / 10000.0;
+ rotate(r);
+
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+ if (image_ready == false) {
+ if (gl.imageReady(image_id) == false) {
+ return;
+ }
+
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +true);
+ gl.activeTexture(gl.TEXTURE0);
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image_id);
+
+ gl.uniform1i(sampler, 0);
+ image_ready = true;
+ }
+
+ for (var g_i: i32 = 0; g_i < groupArray.length; g_i++) {
+ vGroup = groupArray[g_i];
+ gl.bufferData(gl.ARRAY_BUFFER, objArray[vGroup.obj_index], gl.DYNAMIC_DRAW);
+ let diffuse_r: f32 = matArray[vGroup.mat_index][4];
+ let diffuse_g: f32 = matArray[vGroup.mat_index][5];
+ let diffuse_b: f32 = matArray[vGroup.mat_index][6];
+ gl.uniform3f(diffuse, diffuse_r, diffuse_g, diffuse_b);
+
+ // dimensions | data_type | normalize | stride | offset
+ gl.vertexAttribPointer(position_al, 3, gl.FLOAT, +false, 32, 0);
+ gl.vertexAttribPointer(tex_uv_al, 2, gl.FLOAT, +false, 32, 12);
+ gl.vertexAttribPointer(normal_al, 3, gl.FLOAT, +false, 32, 20);
+ gl.drawArrays(gl.TRIANGLES, vGroup.start_face, vGroup.length);
+ }
+}
diff --git a/aswebglue/examples/TextureQuad/README.md b/aswebglue/examples/TextureQuad/README.md
new file mode 100644
index 0000000..9adda2a
--- /dev/null
+++ b/aswebglue/examples/TextureQuad/README.md
@@ -0,0 +1,115 @@
+# Textured Quad
+
+Drawing sprites in WebGL is usually done by texturing a quad. In this demo, I draw a sprite using WebGL by texturing a quad (rectangle).
+
+## The Vertex Shader
+
+The vertex shader is pretty striaght forward. I'm passing in 2D coordinates so the coordinates must be transformed in a vec4 by adding a z and w value to the end of the position object before passing it on to gl_Position. The UV coordinates are passed on from the vertex shader to the fragment shader without modification.
+
+Here's the code for the vertex shader:
+```
+precision highp float;
+
+in vec2 position;
+in vec2 tex_coord;
+
+out vec2 tc;
+
+void main() {
+ gl_Position = vec4(position, 0.0, 1.0);
+ tc = tex_coord;
+}
+```
+## The Fragment Shader
+
+The fragment shader uses the uv coordinates to get the pixel value from the sampler2D passed in as a uniform. The output color is set to the value retrieved from the sampler with a call to the texture function.
+
+Here's the fragment shader code:
+```
+precision highp float;
+
+in vec2 position;
+in vec2 tex_coord;
+
+out vec2 tc;
+
+void main() {
+ gl_Position = vec4(position, 0.0, 1.0);
+ tc = tex_coord;
+}
+```
+## Creating the ImageData object
+
+When the Wasm module loads, I have to load an image. I do so with the following call:
+
+```
+var image_id: ImageData = createImage('kaijunicorn.png');
+var image_ready: bool = false;
+```
+
+The second line creates an image_ready boolean. I'm going to set this flag when the image is ready so I don't need to make a call to the JavaScript from within the display_loop once the image is ready to render.
+
+## The Quad Data
+
+I use a StaticArray where I put the quad's x and y data. On each line I put the data for a single vertex, which is four f32 values for the x, y, u and v values. Here's the quad_data:
+
+```
+let quad_data: StaticArray = [
+// x y u v
+ -0.15, -0.2, 0.0, 0.0,
+ -0.15, 0.2, 0.0, 0.99,
+ 0.15, -0.2, 0.95, 0.0,
+ 0.15, 0.2, 0.95, 0.99,];
+```
+
+## The displayLoop function
+
+in the displayLoop, I need to check the image_ready flag each time through the loop. If the image is not ready yet, I need to call the imageReady function:
+
+```
+export function displayLoop(): void {
+ clearColor(gl, 0.0, 0.0, 0.0, 1.0);
+ clear(gl, COLOR_BUFFER_BIT);
+
+ if (image_ready == false) {
+ if (imageReady(image_id) == false) {
+ return;
+ }
+```
+
+There are several WebGL functions that need to be called to set up WebGL to render texture data. It then sets the image_ready flat to true:
+
+```
+ pixelStorei(gl, UNPACK_FLIP_Y_WEBGL, 1);
+ pixelStorei(gl, UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
+ activeTexture(gl, TEXTURE0);
+ bindTexture(gl, TEXTURE_2D, texture);
+ texParameteri(gl, TEXTURE_2D, TEXTURE_MIN_FILTER, NEAREST);
+ texParameteri(gl, TEXTURE_2D, TEXTURE_MAG_FILTER, NEAREST);
+ texImage2D(gl, TEXTURE_2D, 0, RGB, RGB, UNSIGNED_BYTE, image_id);
+
+ uniform1i(gl, sampler, 0);
+ image_ready = true;
+ }
+```
+
+I buffer the quad's vertex data:
+```
+ bufferData(gl, ARRAY_BUFFER, quad_data, STATIC_DRAW);
+```
+
+I bind the array buffer to the vertex attributes for the position and uv data:
+```
+ // attribute | dimensions | data type | normalize | stride bytes | offset bytes
+ vertexAttribPointer(gl, position_al, 2, FLOAT, false, 16, 0);
+ vertexAttribPointer(gl, tex_coord_al, 2, FLOAT, false, 16, 8);
+
+```
+
+
+Finally I draw the arrays:
+```
+ drawArrays(gl, TRIANGLE_STRIP, 0, quad_data.length / 4);
+
+```
+
diff --git a/aswebglue/examples/TextureQuad/index.html b/aswebglue/examples/TextureQuad/index.html
new file mode 100644
index 0000000..cdab61c
--- /dev/null
+++ b/aswebglue/examples/TextureQuad/index.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ Textured Quad Example
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/TextureQuad/kaijunicorn.png b/aswebglue/examples/TextureQuad/kaijunicorn.png
new file mode 100644
index 0000000..c117d83
Binary files /dev/null and b/aswebglue/examples/TextureQuad/kaijunicorn.png differ
diff --git a/aswebglue/examples/TextureQuad/texture_quad.ts b/aswebglue/examples/TextureQuad/texture_quad.ts
new file mode 100644
index 0000000..1c64d6e
--- /dev/null
+++ b/aswebglue/examples/TextureQuad/texture_quad.ts
@@ -0,0 +1,131 @@
+/**
+ * @author Rick Battagline / https://embed.com
+ */
+
+import {
+ WebGLRenderingContext,
+ WebGLShader,
+ ImageData,
+ WebGLUniformLocation,
+ WebGLBuffer,
+ GLint,
+ WebGLProgram,
+ WebGLTexture,
+} from '../../WebGL';
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec2 position;
+ in vec2 tex_coord;
+
+ out vec2 tc;
+
+ void main() {
+ gl_Position = vec4(position, 0.0, 1.0);
+ tc = tex_coord;
+ }
+`;
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec2 tc;
+
+ uniform sampler2D sampler;
+
+ out vec4 color;
+
+ void main() {
+ color = texture( sampler, tc );
+ }
+`;
+
+// initialize webgl
+var gl: WebGLRenderingContext = new WebGLRenderingContext('cnvs', 'webgl2');
+
+// ImageData, createImage, imageReady,
+var image_id: ImageData = gl.createImage('kaijunicorn.png');
+var image_ready: bool = false;
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+let tex_coord_al: GLint = gl.getAttribLocation(program, 'tex_coord');
+gl.enableVertexAttribArray(tex_coord_al);
+
+gl.enable(gl.BLEND);
+gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+
+let quad_data: StaticArray = [
+ // x y u v
+ -0.15,
+ -0.2,
+ 0.0,
+ 0.0,
+ -0.15,
+ 0.2,
+ 0.0,
+ 0.99,
+ 0.15,
+ -0.2,
+ 0.95,
+ 0.0,
+ 0.15,
+ 0.2,
+ 0.95,
+ 0.99,
+];
+
+let texture: WebGLTexture = gl.createTexture();
+let sampler: WebGLUniformLocation = gl.getUniformLocation(program, 'sampler');
+
+export function displayLoop(): void {
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ if (image_ready == false) {
+ if (gl.imageReady(image_id) == false) {
+ return;
+ }
+
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +true);
+ gl.activeTexture(gl.TEXTURE0);
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image_id);
+
+ gl.uniform1i(sampler, 0);
+ image_ready = true;
+ }
+
+ gl.bufferData(gl.ARRAY_BUFFER, quad_data, gl.STATIC_DRAW);
+
+ //vertexAttribPointer attribute | dimensions | data type | normalize | stride bytes | offset bytes
+ gl.vertexAttribPointer(position_al, 2, gl.FLOAT, +false, 16, 0);
+ gl.vertexAttribPointer(tex_coord_al, 2, gl.FLOAT, +false, 16, 8);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, quad_data.length / 4);
+}
diff --git a/aswebglue/examples/WarpSpeed/README.md b/aswebglue/examples/WarpSpeed/README.md
new file mode 100644
index 0000000..5e9e524
--- /dev/null
+++ b/aswebglue/examples/WarpSpeed/README.md
@@ -0,0 +1,176 @@
+# Simple Lighting Model
+
+This is a simple lighting model for cube. With each call of the displayLoop function I rotate the cube and render it.
+
+## Vertex Shader
+
+The vertex shader has a fixed light position hardcoded into the shader. The face lighting is calculated with a simple dot product. I have a hardcoded rotation matrix that I use to tilt the cube when I render it. The dot product value is used for the red, green and blue components of the color value passed to the fragment shader. The red and green component has a minimum ambient lighting value of 0.2, and the blue has a minimum value of 0.3. This gives the cube shadows a slight blue tint.
+
+Here's the vertex shader code:
+```
+ precision mediump float;
+
+ in vec3 position;
+ in vec3 normal;
+ out vec4 c;
+
+ void main() {
+ const vec3 light = vec3(0.25, 2.0, -0.5);
+ float d = clamp( dot( normal, light ), 0.0, 1.0);
+ vec4 pos = vec4( position, 1.0 );
+
+ mat4 mRotateTranslate = mat4(
+ 1.0, 0.0, 0.0, 0.0, // column 1
+ 0.0, cos(-0.2),-sin(-0.2), -0.2, // column 2
+ 0.0, sin(-0.0), cos(-0.2), 0.0, // column 3
+ 0.0, 0.0, 0.0, 1.0 // column 4
+ );
+
+ gl_Position = pos * mRotateTranslate;
+ c = vec4(max(d, 0.2), max(d, 0.2), max(d, 0.3), 1.0);
+ }
+```
+## Fragment Shader
+
+The fragment shader simply outputs the color value coming in from the vertex shader:
+
+```
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+```
+
+## The Cube
+
+The cube vertex data is hardcoded into a StaticArray with each vertex having x,y,z vertex values and x,y,z normal values:
+
+```
+let cube_data: StaticArray = [
+ // X Y Z NX NY NZ
+ // Front
+ -0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
+ 0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
+ -0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
+
+ 0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
+ -0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
+ 0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
+ // X Y Z NX NY NZ
+ // Top
+ -0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
+ 0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
+ -0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
+
+ 0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
+ -0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
+ 0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
+ // X Y Z NX NY NZ
+ // Back
+ -0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
+ 0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
+ -0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
+
+ 0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
+ -0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
+ 0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
+ // X Y Z NX NY NZ
+ // Right
+ 0.5, -0.5, -0.5, 1.0, 0.0, 0.0,
+ 0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
+ 0.5, 0.5, -0.5, 1.0, 0.0, 0.0,
+
+ 0.5, 0.5, 0.5, 1.0, 0.0, 0.0,
+ 0.5, 0.5, -0.5, 1.0, 0.0, 0.0,
+ 0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
+ // Bottom
+ -0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
+ 0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
+ -0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
+
+ 0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
+ -0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
+ 0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
+
+ // X Y Z NX NY NZ
+ // Left
+ -0.5, -0.5, -0.5, -1.0, 0.0, 0.0,
+ -0.5, -0.5, 0.5, -1.0, 0.0, 0.0,
+ -0.5, 0.5, -0.5, -1.0, 0.0, 0.0,
+
+ -0.5, 0.5, 0.5, -1.0, 0.0, 0.0,
+ -0.5, 0.5, -0.5, -1.0, 0.0, 0.0,
+ -0.5, -0.5, 0.5, -1.0, 0.0, 0.0,
+];
+```
+
+## rotate function
+
+The rotate function is called once per frame and rotates the cube data based on the time delta between the current frame and the previous frame:
+
+```
+function rotate(theta: f32): void { //u32 {
+ for (var coord_i: i32 = 0; coord_i < cube_data.length; coord_i += 6) {
+ let x: f32 = cube_data[coord_i];
+ let z: f32 = cube_data[coord_i + 2];
+
+ let nx: f32 = cube_data[coord_i + 3];
+ let nz: f32 = cube_data[coord_i + 5];
+
+ let x1: f32 = x * Mathf.cos(theta) - z * Mathf.sin(theta);
+ let z1: f32 = z * Mathf.cos(theta) + x * Mathf.sin(theta);
+
+ let nx1: f32 = nx * Mathf.cos(theta) - nz * Mathf.sin(theta);
+ let nz1: f32 = nz * Mathf.cos(theta) + nx * Mathf.sin(theta);
+
+ cube_data[coord_i] = x1;
+ cube_data[coord_i + 2] = z1;
+
+ cube_data[coord_i + 3] = nx1;
+ cube_data[coord_i + 5] = nz1;
+ }
+
+ return;
+}
+```
+
+## displayLoop function
+
+The displayLoop is passed the time delta between the previous frame render and this one. I divide the delta value by 10000.0 because that amount of rotation per second felt right for this demo:
+```
+ let r: f32 = delta / 10000.0;
+ rotate(r);
+```
+
+Everything else is pretty standard for a display loop, clearing the canvas:
+
+```
+ clearColor(gl, 0.0, 0.0, 0.0, 1.0);
+ clear(gl, COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT);
+```
+
+Buffering the cube data:
+
+```
+ bufferData(gl, ARRAY_BUFFER, cube_data, DYNAMIC_DRAW);
+```
+
+Binding the vertex data to the vertex attributes in the shader:
+
+```
+ vertexAttribPointer(gl, position_al, 3, FLOAT, false, 24, 0);
+ vertexAttribPointer(gl, normal_al, 3, FLOAT, false, 24, 12);
+```
+
+Finally, drawing the array:
+```
+ drawArrays(gl, TRIANGLES, 0, cube_data.length / 6);
+```
+
+
+
+
+
diff --git a/aswebglue/examples/WarpSpeed/index.html b/aswebglue/examples/WarpSpeed/index.html
new file mode 100644
index 0000000..ebdb377
--- /dev/null
+++ b/aswebglue/examples/WarpSpeed/index.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ Starfield Point Rendering Demo
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/WarpSpeed/warp_speed.ts b/aswebglue/examples/WarpSpeed/warp_speed.ts
new file mode 100644
index 0000000..fcb9e48
--- /dev/null
+++ b/aswebglue/examples/WarpSpeed/warp_speed.ts
@@ -0,0 +1,206 @@
+/**
+ * @author Rick Battagline / https://embed.com
+ */
+
+import {WebGLRenderingContext, WebGLShader, WebGLBuffer, GLint, WebGLProgram} from '../../WebGL';
+
+class Point {
+ public x: f32 = 0.0;
+ public y: f32 = 0.0;
+ public dx: f32 = 0.0;
+ public dy: f32 = 0.0;
+
+ constructor() {
+ this.reset();
+ }
+
+ public reset(): void {
+ this.x = 0;
+ this.y = 0;
+
+ do {
+ this.dx = Mathf.random() * 0.1 - 0.05;
+ this.dy = Mathf.random() * 0.1 - 0.05;
+ } while (Mathf.abs(this.dx) + Mathf.abs(this.dy) < 0.02);
+ }
+
+ public move(): void {
+ if (this.x > 1.0 || this.x < -1.0 || this.y > 1.0 || this.y < -1.0) {
+ this.reset();
+ }
+ this.x += this.dx;
+ this.y += this.dy;
+ }
+}
+
+const VERTEX_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+
+ in vec2 position;
+ out vec4 c;
+
+ void main() {
+ gl_Position = vec4( position, 0.0, 1.0 );
+ float total = clamp(abs(position.x) + abs(position.y) + 0.4, 0.01, 1.0);
+ gl_PointSize = total * 8.0;
+ c = vec4(total, total, total, 1.0);
+
+ }
+`;
+// THIS IS THE FRAGMENT SHADER
+const FRAGMENT_SHADER_CODE: string = `#version 300 es
+ precision highp float;
+ in vec4 c;
+ out vec4 color;
+
+ void main() {
+ color = c;
+ }
+`;
+
+// initialize webgl
+var gl: WebGLRenderingContext = new WebGLRenderingContext('cnvs', 'webgl2');
+
+let vertex_shader: WebGLShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertex_shader, VERTEX_SHADER_CODE);
+gl.compileShader(vertex_shader);
+
+let fragment_shader: WebGLShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragment_shader, FRAGMENT_SHADER_CODE);
+gl.compileShader(fragment_shader);
+
+let program: WebGLProgram = gl.createProgram();
+
+gl.attachShader(program, vertex_shader);
+gl.attachShader(program, fragment_shader);
+
+gl.linkProgram(program);
+
+gl.useProgram(program);
+
+let buffer: WebGLBuffer = gl.createBuffer();
+gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+
+let position_al: GLint = gl.getAttribLocation(program, 'position');
+gl.enableVertexAttribArray(position_al);
+
+// prettier-ignore
+let point_list: StaticArray = [
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+ new Point(), new Point(), new Point(), new Point(), new Point(),
+];
+
+// prettier-ignore
+let point_data: StaticArray = [
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
+];
+
+export function displayLoop(delta: i32): void {
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ for (let i: i32 = 0; i < point_list.length; i++) {
+ point_list[i].move();
+ point_data[i * 2] = point_list[i].x;
+ point_data[i * 2 + 1] = point_list[i].y;
+ }
+
+ gl.bufferData(gl.ARRAY_BUFFER, point_data, gl.STATIC_DRAW);
+
+ const dimensions: i32 = 2;
+ const data_type: i32 = gl.FLOAT;
+ const normalize: i32 = +false;
+ const stride: i32 = 0;
+ const offset: i32 = 0;
+
+ gl.vertexAttribPointer(position_al, dimensions, data_type, normalize, stride, offset);
+
+ gl.drawArrays(gl.POINTS, 0, point_list.length);
+}
diff --git a/aswebglue/examples/commented.mtl b/aswebglue/examples/commented.mtl
new file mode 100644
index 0000000..a710205
--- /dev/null
+++ b/aswebglue/examples/commented.mtl
@@ -0,0 +1,62 @@
+# Blender MTL File: 'robot.blend'
+# Material Count: 3
+
+# http://paulbourke.net/dataformats/mtl/
+# http://paulbourke.net/dataformats/obj/
+
+newmtl Material
+# Ns Specular Exponent
+Ns 323.999994
+# Ka Ambient Reflectivity
+Ka 1.000000 1.000000 1.000000
+# Kd Diffuse Reflectivity
+Kd 0.800000 0.314507 0.070683
+# Ks Specular Reflectivity
+Ks 0.500000 0.500000 0.500000
+# Ke Emission
+Ke 0.000000 0.000000 0.000000
+# Ni Optical Density
+Ni 1.450000
+# d dissolve factor
+d 1.000000
+# illum illumination model
+# Illumination Properties that are turned on in the
+# model Property Editor
+# 0 Color on and Ambient off
+# 1 Color on and Ambient on
+# 2 Highlight on
+# 3 Reflection on and Ray trace on
+# 4 Transparency: Glass on
+# Reflection: Ray trace on
+# 5 Reflection: Fresnel on and Ray trace on
+# 6 Transparency: Refraction on
+# Reflection: Fresnel off and Ray trace on
+# 7 Transparency: Refraction on
+# Reflection: Fresnel on and Ray trace on
+# 8 Reflection on and Ray trace off
+# 9 Transparency: Glass on
+# Reflection: Ray trace off
+# 10 Casts shadows onto invisible surfaces
+
+illum 2
+
+
+newmtl Material.001
+Ns 225.000000
+Ka 1.000000 1.000000 1.000000
+Kd 1.000000 0.000000 0.000000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
+
+newmtl Material.002
+Ns 225.000000
+Ka 1.000000 1.000000 1.000000
+Kd 0.000000 0.000000 1.000000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
diff --git a/aswebglue/examples/commented.obj b/aswebglue/examples/commented.obj
new file mode 100644
index 0000000..47915ff
--- /dev/null
+++ b/aswebglue/examples/commented.obj
@@ -0,0 +1,393 @@
+# Blender v2.90.1 OBJ File: 'robot.blend'
+# www.blender.org (created by)
+# mtlib material file
+mtllib robot.mtl
+# o object name
+o Cube
+# v vertex position data
+v 1.000000 1.000000 -1.000000
+v 1.000000 -1.000000 -1.000000
+v 1.000000 1.000000 1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+v -1.000000 -1.000000 -1.000000
+v -1.000000 1.000000 1.000000
+v -1.000000 -1.000000 1.000000
+v 0.396396 3.195775 0.396396
+v -0.396396 3.195775 0.396396
+v 0.396396 3.195775 -0.396396
+v -0.396396 3.195775 -0.396396
+v 0.707780 4.659433 0.707780
+v -0.707780 4.659433 0.707780
+v 0.707780 4.659433 -0.707780
+v -0.707780 4.659433 -0.707780
+v 0.707780 5.747853 0.707780
+v -0.707780 5.747853 0.707780
+v 0.707780 5.747853 -0.707780
+v -0.707780 5.747853 -0.707780
+v 0.363607 6.039236 0.363607
+v -0.363607 6.039236 0.363607
+v 0.363607 6.039236 -0.363607
+v -0.363607 6.039236 -0.363607
+v 0.363607 6.228965 0.363607
+v -0.363607 6.228965 0.363607
+v 0.363607 6.228965 -0.363607
+v -0.363607 6.228965 -0.363607
+v 0.527745 6.437937 0.527745
+v -0.527745 6.437937 0.527745
+v 0.527745 6.437937 -0.527745
+v -0.527745 6.437937 -0.527745
+v 0.581972 7.220059 0.581972
+v -0.581972 7.220059 0.581972
+v 0.581972 7.220059 -0.581972
+v -0.581972 7.220059 -0.581972
+v 0.285750 7.649150 0.285750
+v -0.285750 7.649150 0.285750
+v 0.285750 7.649150 -0.285750
+v -0.285750 7.649150 -0.285750
+v 0.980918 4.891058 -0.406536
+v 0.980918 4.891058 0.406536
+v 0.980918 5.516228 -0.406536
+v 0.980918 5.516228 0.406536
+v -0.980918 4.891058 0.406536
+v -0.980918 4.891058 -0.406536
+v -0.980918 5.516228 0.406536
+v -0.980918 5.516228 -0.406536
+v -1.280918 4.891058 0.406536
+v -1.280918 4.891058 -0.406536
+v -1.280918 5.516228 0.406536
+v -1.280918 5.516228 -0.406536
+v 1.280918 4.891058 -0.406536
+v 1.280918 4.891058 0.406536
+v 1.280918 5.516228 -0.406536
+v 1.280918 5.516228 0.406536
+v 1.039887 4.005651 -0.246717
+v 1.039887 4.005651 0.246717
+v -1.039887 4.005651 0.246717
+v -1.039887 4.005651 -0.246717
+v -1.221950 4.005651 0.246717
+v -1.221950 4.005651 -0.246717
+v 1.221950 4.005651 -0.246717
+v 1.221950 4.005651 0.246717
+v 0.980918 3.537906 -0.406536
+v 0.980918 3.356243 0.406536
+v -0.980918 3.356243 0.406536
+v -0.980918 3.537906 -0.406536
+v -1.280918 3.356243 0.406536
+v -1.280918 3.537906 -0.406536
+v 1.280918 3.537906 -0.406536
+v 1.280918 3.356243 0.406536
+v 0.980918 2.342852 -0.795716
+v 0.980918 2.342852 -0.481741
+v -0.980918 2.342852 -0.481741
+v -0.980918 2.342852 -0.795716
+v -1.280918 2.342852 -0.481741
+v -1.280918 2.342852 -0.795716
+v 1.280918 2.342852 -0.795716
+v 1.280918 2.342852 -0.481741
+v 0.980918 2.075831 -1.046264
+v 0.980918 1.921174 -0.773021
+v -0.980918 1.921174 -0.773021
+v -0.980918 2.075831 -1.046264
+v -1.280918 1.921174 -0.773021
+v -1.280918 2.075831 -1.046264
+v 1.280918 2.075831 -1.046264
+v 1.280918 1.921174 -0.773021
+v 1.055918 1.868141 -1.073623
+v 1.055918 1.790813 -0.937002
+v -1.055918 1.790813 -0.937002
+v -1.055918 1.868141 -1.073623
+v -1.205918 1.790813 -0.937002
+v -1.205918 1.868141 -1.073623
+v 1.205918 1.868141 -1.073623
+v 1.205918 1.790813 -0.937002
+
+# vt vertex texture data
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.375000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.375000 1.000000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.375000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.500000
+vt 0.125000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.000000
+vt 0.625000 0.750000
+vt 0.625000 0.000000
+vt 0.625000 1.000000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.875000 0.500000
+vt 0.875000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 1.000000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+
+# vn vertex normal data
+vn 0.0000 0.2651 -0.9642
+vn 0.0000 0.0000 1.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 0.2651 0.9642
+vn -0.9642 0.2651 0.0000
+vn 0.9642 0.2651 0.0000
+vn -0.6461 0.7632 0.0000
+vn 0.7408 0.0000 0.6717
+vn -0.7408 0.0000 -0.6717
+vn 0.0000 0.7632 0.6461
+vn 0.0000 0.7632 -0.6461
+vn 0.6461 0.7632 0.0000
+vn 0.0000 -0.6177 -0.7864
+vn 0.7864 -0.6177 0.0000
+vn -0.7864 -0.6177 0.0000
+vn 0.0000 -0.6177 0.7864
+vn 0.0000 0.5681 -0.8229
+vn 0.0000 -0.0692 0.9976
+vn 0.0000 1.0000 0.0000
+vn 0.8229 0.5681 0.0000
+vn -0.8229 0.5681 0.0000
+vn 0.0000 0.5681 0.8229
+vn 0.6468 -0.7627 0.0000
+vn 0.7408 0.0000 -0.6717
+vn 0.6468 0.7627 0.0000
+vn -0.6468 0.7627 0.0000
+vn -0.7408 0.0000 0.6717
+vn -0.6468 -0.7627 0.0000
+vn -0.9978 -0.0665 0.0000
+vn 0.9978 -0.0665 0.0000
+vn 0.0000 0.2390 0.9710
+vn 0.9944 0.1050 0.0146
+vn 0.0000 -0.1776 -0.9841
+vn 0.0000 -0.1776 0.9841
+vn 0.0000 -0.6592 0.7520
+vn 0.0000 0.3233 -0.9463
+vn -0.9944 0.1050 0.0146
+vn 0.0000 0.6843 -0.7292
+vn 0.0000 0.3097 -0.9508
+vn 0.0000 0.1306 -0.9914
+vn 0.9329 -0.3135 -0.1774
+vn 0.0000 -0.5684 0.8228
+vn 0.0000 -0.8703 -0.4926
+vn -0.9329 -0.3135 -0.1774
+vn 0.0000 -0.7828 0.6223
+vn -0.9976 -0.0692 0.0000
+vn 0.0000 -0.0692 -0.9976
+vn 0.9976 -0.0692 0.0000
+vn -0.9781 -0.2081 0.0000
+vn 0.0000 -0.2081 0.9781
+vn 0.0000 -0.2081 -0.9781
+vn 0.9781 -0.2081 0.0000
+
+# set current material to Material
+usemtl Material
+# I can't figure out what s is
+s off
+
+# face vertex indexes
+f 1/1/1 5/2/1 12/3/1 11/4/1
+f 4/5/2 3/6/2 7/7/2 8/8/2
+f 8/9/3 7/10/3 5/2/3 6/11/3
+f 6/12/4 2/13/4 4/5/4 8/14/4
+f 2/13/5 1/1/5 3/6/5 4/5/5
+f 6/11/6 5/2/6 1/1/6 2/13/6
+f 7/7/7 3/6/7 9/15/7 10/16/7
+f 5/2/8 7/10/8 10/17/8 12/3/8
+f 3/6/9 1/1/9 11/4/9 9/15/9
+f 15/18/6 16/19/6 20/20/6 19/21/6
+f 20/20/10 18/22/10 22/23/10 24/24/10
+f 17/25/11 13/26/11 42/27/11 44/28/11
+f 20/20/12 16/19/12 46/29/12 48/30/12
+f 14/31/2 13/26/2 17/25/2 18/32/2
+f 22/33/2 21/34/2 25/35/2 26/36/2
+f 18/32/13 17/25/13 21/34/13 22/33/13
+f 19/21/14 20/20/14 24/24/14 23/37/14
+f 17/25/15 19/21/15 23/37/15 21/34/15
+f 27/38/16 28/39/16 32/40/16 31/41/16
+f 23/37/6 24/24/6 28/39/6 27/38/6
+f 21/34/5 23/37/5 27/38/5 25/35/5
+f 24/24/3 22/23/3 26/42/3 28/39/3
+f 25/35/17 27/38/17 31/41/17 29/43/17
+f 28/39/18 26/42/18 30/44/18 32/40/18
+f 26/36/19 25/35/19 29/43/19 30/45/19
+f 35/46/20 36/47/20 40/48/20 39/49/20
+f 30/45/21 29/43/21 33/50/21 34/51/21
+f 39/49/22 40/52/22 38/53/22 37/54/22
+f 33/50/23 35/46/23 39/49/23 37/54/23
+f 36/47/24 34/55/24 38/56/24 40/48/24
+f 34/51/25 33/50/25 37/54/25 38/57/25
+f 41/58/6 43/59/6 55/60/6 53/61/6
+f 13/26/26 15/18/26 41/58/26 42/27/26
+f 15/18/27 19/21/27 43/59/27 41/58/27
+f 19/21/28 17/25/28 44/28/28 43/59/28
+f 45/62/2 47/63/2 51/64/2 49/65/2
+f 18/22/29 20/20/29 48/30/29 47/66/29
+f 14/31/30 18/32/30 47/63/30 45/62/30
+f 16/19/31 14/67/31 45/68/31 46/29/31
+f 50/69/3 49/70/3 51/71/3 52/72/3
+f 47/66/22 48/30/22 52/72/22 51/71/22
+f 48/30/6 46/29/6 50/69/6 52/72/6
+f 42/27/32 41/58/32 57/73/32 58/74/32
+f 54/75/5 53/61/5 55/60/5 56/76/5
+f 53/61/33 54/75/33 64/77/33 63/78/33
+f 44/28/2 42/27/2 54/75/2 56/76/2
+f 43/59/22 44/28/22 56/76/22 55/60/22
+f 59/79/34 61/80/34 69/81/34 67/82/34
+f 63/78/35 64/77/35 72/83/35 71/84/35
+f 41/58/36 53/61/36 63/78/36 57/73/36
+f 49/70/32 50/69/32 62/85/32 61/86/32
+f 50/69/36 46/29/36 60/87/36 62/85/36
+f 45/62/37 49/65/37 61/80/37 59/79/37
+f 54/75/37 42/27/37 58/74/37 64/77/37
+f 46/29/33 45/68/33 59/88/33 60/87/33
+f 72/83/38 66/89/38 74/90/38 80/91/38
+f 66/89/3 65/92/3 73/93/3 74/90/3
+f 60/87/35 59/88/35 67/94/35 68/95/35
+f 57/73/39 63/78/39 71/84/39 65/92/39
+f 62/85/39 60/87/39 68/95/39 70/96/39
+f 61/86/40 62/85/40 70/96/40 69/97/40
+f 58/74/40 57/73/40 65/92/40 66/89/40
+f 64/77/34 58/74/34 66/89/34 72/83/34
+f 78/98/41 76/99/41 84/100/41 86/101/41
+f 73/93/41 79/102/41 87/103/41 81/104/41
+f 71/84/5 72/83/5 80/91/5 79/102/5
+f 67/82/38 69/81/38 77/105/38 75/106/38
+f 68/95/5 67/94/5 75/107/5 76/99/5
+f 65/92/42 71/84/42 79/102/42 73/93/42
+f 70/96/42 68/95/42 76/99/42 78/98/42
+f 69/97/3 70/96/3 78/98/3 77/108/3
+f 81/104/43 87/103/43 95/109/43 89/110/43
+f 84/100/44 83/111/44 91/112/44 92/113/44
+f 77/108/3 78/98/3 86/101/3 85/114/3
+f 74/90/3 73/93/3 81/104/3 82/115/3
+f 80/91/45 74/90/45 82/115/45 88/116/45
+f 79/102/5 80/91/5 88/116/5 87/103/5
+f 75/106/45 77/105/45 85/117/45 83/118/45
+f 76/99/5 75/107/5 83/111/5 84/100/5
+f 92/113/46 91/112/46 93/119/46 94/120/46
+f 90/121/46 89/110/46 95/109/46 96/122/46
+f 86/101/43 84/100/43 92/113/43 94/120/43
+f 85/114/47 86/101/47 94/120/47 93/119/47
+f 82/115/47 81/104/47 89/110/47 90/121/47
+f 88/116/48 82/115/48 90/121/48 96/122/48
+f 87/103/44 88/116/44 96/122/44 95/109/44
+f 83/118/48 85/117/48 93/123/48 91/124/48
+
+# second material
+usemtl Material.001
+f 32/40/49 30/44/49 34/55/49 36/47/49
+f 31/41/50 32/40/50 36/47/50 35/46/50
+f 29/43/51 31/41/51 35/46/51 33/50/51
+
+# third material
+usemtl Material.002
+f 12/3/52 10/17/52 14/67/52 16/19/52
+f 10/16/53 9/15/53 13/26/53 14/31/53
+f 11/4/54 12/3/54 16/19/54 15/18/54
+f 9/15/55 11/4/55 15/18/55 13/26/55
diff --git a/aswebglue/examples/icosphere.png b/aswebglue/examples/icosphere.png
new file mode 100644
index 0000000..d9de143
Binary files /dev/null and b/aswebglue/examples/icosphere.png differ
diff --git a/aswebglue/examples/monkey.mtl b/aswebglue/examples/monkey.mtl
new file mode 100644
index 0000000..f231bdf
--- /dev/null
+++ b/aswebglue/examples/monkey.mtl
@@ -0,0 +1,10 @@
+# Blender MTL File: 'None'
+# Material Count: 1
+
+newmtl None
+Ns 500
+Ka 0.8 0.8 0.8
+Kd 0.8 0.8 0.8
+Ks 0.8 0.8 0.8
+d 1
+illum 2
diff --git a/aswebglue/examples/monkey.obj b/aswebglue/examples/monkey.obj
new file mode 100644
index 0000000..0552c62
--- /dev/null
+++ b/aswebglue/examples/monkey.obj
@@ -0,0 +1,2068 @@
+# Blender v2.90.1 OBJ File: ''
+# www.blender.org
+mtllib monkey.mtl
+o Suzanne
+v 0.437500 0.164062 0.765625
+v -0.437500 0.164062 0.765625
+v 0.500000 0.093750 0.687500
+v -0.500000 0.093750 0.687500
+v 0.546875 0.054688 0.578125
+v -0.546875 0.054688 0.578125
+v 0.351562 -0.023438 0.617188
+v -0.351562 -0.023438 0.617188
+v 0.351562 0.031250 0.718750
+v -0.351562 0.031250 0.718750
+v 0.351562 0.132812 0.781250
+v -0.351562 0.132812 0.781250
+v 0.273438 0.164062 0.796875
+v -0.273438 0.164062 0.796875
+v 0.203125 0.093750 0.742188
+v -0.203125 0.093750 0.742188
+v 0.156250 0.054688 0.648438
+v -0.156250 0.054688 0.648438
+v 0.078125 0.242188 0.656250
+v -0.078125 0.242188 0.656250
+v 0.140625 0.242188 0.742188
+v -0.140625 0.242188 0.742188
+v 0.242188 0.242188 0.796875
+v -0.242188 0.242188 0.796875
+v 0.273438 0.328125 0.796875
+v -0.273438 0.328125 0.796875
+v 0.203125 0.390625 0.742188
+v -0.203125 0.390625 0.742188
+v 0.156250 0.437500 0.648438
+v -0.156250 0.437500 0.648438
+v 0.351562 0.515625 0.617188
+v -0.351562 0.515625 0.617188
+v 0.351562 0.453125 0.718750
+v -0.351562 0.453125 0.718750
+v 0.351562 0.359375 0.781250
+v -0.351562 0.359375 0.781250
+v 0.437500 0.328125 0.765625
+v -0.437500 0.328125 0.765625
+v 0.500000 0.390625 0.687500
+v -0.500000 0.390625 0.687500
+v 0.546875 0.437500 0.578125
+v -0.546875 0.437500 0.578125
+v 0.625000 0.242188 0.562500
+v -0.625000 0.242188 0.562500
+v 0.562500 0.242188 0.671875
+v -0.562500 0.242188 0.671875
+v 0.468750 0.242188 0.757812
+v -0.468750 0.242188 0.757812
+v 0.476562 0.242188 0.773438
+v -0.476562 0.242188 0.773438
+v 0.445312 0.335938 0.781250
+v -0.445312 0.335938 0.781250
+v 0.351562 0.375000 0.804688
+v -0.351562 0.375000 0.804688
+v 0.265625 0.335938 0.820312
+v -0.265625 0.335938 0.820312
+v 0.226562 0.242188 0.820312
+v -0.226562 0.242188 0.820312
+v 0.265625 0.156250 0.820312
+v -0.265625 0.156250 0.820312
+v 0.351562 0.242188 0.828125
+v -0.351562 0.242188 0.828125
+v 0.351562 0.117188 0.804688
+v -0.351562 0.117188 0.804688
+v 0.445312 0.156250 0.781250
+v -0.445312 0.156250 0.781250
+v 0.000000 0.429688 0.742188
+v 0.000000 0.351562 0.820312
+v 0.000000 -0.679688 0.734375
+v 0.000000 -0.320312 0.781250
+v 0.000000 -0.187500 0.796875
+v 0.000000 -0.773438 0.718750
+v 0.000000 0.406250 0.601562
+v 0.000000 0.570312 0.570312
+v 0.000000 0.898438 -0.546875
+v 0.000000 0.562500 -0.851562
+v 0.000000 0.070312 -0.828125
+v 0.000000 -0.382812 -0.351562
+v 0.203125 -0.187500 0.562500
+v -0.203125 -0.187500 0.562500
+v 0.312500 -0.437500 0.570312
+v -0.312500 -0.437500 0.570312
+v 0.351562 -0.695312 0.570312
+v -0.351562 -0.695312 0.570312
+v 0.367188 -0.890625 0.531250
+v -0.367188 -0.890625 0.531250
+v 0.328125 -0.945312 0.523438
+v -0.328125 -0.945312 0.523438
+v 0.179688 -0.968750 0.554688
+v -0.179688 -0.968750 0.554688
+v 0.000000 -0.984375 0.578125
+v 0.437500 -0.140625 0.531250
+v -0.437500 -0.140625 0.531250
+v 0.632812 -0.039062 0.539062
+v -0.632812 -0.039062 0.539062
+v 0.828125 0.148438 0.445312
+v -0.828125 0.148438 0.445312
+v 0.859375 0.429688 0.593750
+v -0.859375 0.429688 0.593750
+v 0.710938 0.484375 0.625000
+v -0.710938 0.484375 0.625000
+v 0.492188 0.601562 0.687500
+v -0.492188 0.601562 0.687500
+v 0.320312 0.757812 0.734375
+v -0.320312 0.757812 0.734375
+v 0.156250 0.718750 0.757812
+v -0.156250 0.718750 0.757812
+v 0.062500 0.492188 0.750000
+v -0.062500 0.492188 0.750000
+v 0.164062 0.414062 0.773438
+v -0.164062 0.414062 0.773438
+v 0.125000 0.304688 0.765625
+v -0.125000 0.304688 0.765625
+v 0.203125 0.093750 0.742188
+v -0.203125 0.093750 0.742188
+v 0.375000 0.015625 0.703125
+v -0.375000 0.015625 0.703125
+v 0.492188 0.062500 0.671875
+v -0.492188 0.062500 0.671875
+v 0.625000 0.187500 0.648438
+v -0.625000 0.187500 0.648438
+v 0.640625 0.296875 0.648438
+v -0.640625 0.296875 0.648438
+v 0.601562 0.375000 0.664062
+v -0.601562 0.375000 0.664062
+v 0.429688 0.437500 0.718750
+v -0.429688 0.437500 0.718750
+v 0.250000 0.468750 0.757812
+v -0.250000 0.468750 0.757812
+v 0.000000 -0.765625 0.734375
+v 0.109375 -0.718750 0.734375
+v -0.109375 -0.718750 0.734375
+v 0.117188 -0.835938 0.710938
+v -0.117188 -0.835938 0.710938
+v 0.062500 -0.882812 0.695312
+v -0.062500 -0.882812 0.695312
+v 0.000000 -0.890625 0.687500
+v 0.000000 -0.195312 0.750000
+v 0.000000 -0.140625 0.742188
+v 0.101562 -0.148438 0.742188
+v -0.101562 -0.148438 0.742188
+v 0.125000 -0.226562 0.750000
+v -0.125000 -0.226562 0.750000
+v 0.085938 -0.289062 0.742188
+v -0.085938 -0.289062 0.742188
+v 0.398438 -0.046875 0.671875
+v -0.398438 -0.046875 0.671875
+v 0.617188 0.054688 0.625000
+v -0.617188 0.054688 0.625000
+v 0.726562 0.203125 0.601562
+v -0.726562 0.203125 0.601562
+v 0.742188 0.375000 0.656250
+v -0.742188 0.375000 0.656250
+v 0.687500 0.414062 0.726562
+v -0.687500 0.414062 0.726562
+v 0.437500 0.546875 0.796875
+v -0.437500 0.546875 0.796875
+v 0.312500 0.640625 0.835938
+v -0.312500 0.640625 0.835938
+v 0.203125 0.617188 0.851562
+v -0.203125 0.617188 0.851562
+v 0.101562 0.429688 0.843750
+v -0.101562 0.429688 0.843750
+v 0.125000 -0.101562 0.812500
+v -0.125000 -0.101562 0.812500
+v 0.210938 -0.445312 0.710938
+v -0.210938 -0.445312 0.710938
+v 0.250000 -0.703125 0.687500
+v -0.250000 -0.703125 0.687500
+v 0.265625 -0.820312 0.664062
+v -0.265625 -0.820312 0.664062
+v 0.234375 -0.914062 0.632812
+v -0.234375 -0.914062 0.632812
+v 0.164062 -0.929688 0.632812
+v -0.164062 -0.929688 0.632812
+v 0.000000 -0.945312 0.640625
+v 0.000000 0.046875 0.726562
+v 0.000000 0.210938 0.765625
+v 0.328125 0.476562 0.742188
+v -0.328125 0.476562 0.742188
+v 0.164062 0.140625 0.750000
+v -0.164062 0.140625 0.750000
+v 0.132812 0.210938 0.757812
+v -0.132812 0.210938 0.757812
+v 0.117188 -0.687500 0.734375
+v -0.117188 -0.687500 0.734375
+v 0.078125 -0.445312 0.750000
+v -0.078125 -0.445312 0.750000
+v 0.000000 -0.445312 0.750000
+v 0.000000 -0.328125 0.742188
+v 0.093750 -0.273438 0.781250
+v -0.093750 -0.273438 0.781250
+v 0.132812 -0.226562 0.796875
+v -0.132812 -0.226562 0.796875
+v 0.109375 -0.132812 0.781250
+v -0.109375 -0.132812 0.781250
+v 0.039062 -0.125000 0.781250
+v -0.039062 -0.125000 0.781250
+v 0.000000 -0.203125 0.828125
+v 0.046875 -0.148438 0.812500
+v -0.046875 -0.148438 0.812500
+v 0.093750 -0.156250 0.812500
+v -0.093750 -0.156250 0.812500
+v 0.109375 -0.226562 0.828125
+v -0.109375 -0.226562 0.828125
+v 0.078125 -0.250000 0.804688
+v -0.078125 -0.250000 0.804688
+v 0.000000 -0.289062 0.804688
+v 0.257812 -0.312500 0.554688
+v -0.257812 -0.312500 0.554688
+v 0.164062 -0.242188 0.710938
+v -0.164062 -0.242188 0.710938
+v 0.179688 -0.312500 0.710938
+v -0.179688 -0.312500 0.710938
+v 0.234375 -0.250000 0.554688
+v -0.234375 -0.250000 0.554688
+v 0.000000 -0.875000 0.687500
+v 0.046875 -0.867188 0.687500
+v -0.046875 -0.867188 0.687500
+v 0.093750 -0.820312 0.710938
+v -0.093750 -0.820312 0.710938
+v 0.093750 -0.742188 0.726562
+v -0.093750 -0.742188 0.726562
+v 0.000000 -0.781250 0.656250
+v 0.093750 -0.750000 0.664062
+v -0.093750 -0.750000 0.664062
+v 0.093750 -0.812500 0.640625
+v -0.093750 -0.812500 0.640625
+v 0.046875 -0.851562 0.632812
+v -0.046875 -0.851562 0.632812
+v 0.000000 -0.859375 0.632812
+v 0.171875 0.218750 0.781250
+v -0.171875 0.218750 0.781250
+v 0.187500 0.156250 0.773438
+v -0.187500 0.156250 0.773438
+v 0.335938 0.429688 0.757812
+v -0.335938 0.429688 0.757812
+v 0.273438 0.421875 0.773438
+v -0.273438 0.421875 0.773438
+v 0.421875 0.398438 0.773438
+v -0.421875 0.398438 0.773438
+v 0.562500 0.351562 0.695312
+v -0.562500 0.351562 0.695312
+v 0.585938 0.289062 0.687500
+v -0.585938 0.289062 0.687500
+v 0.578125 0.195312 0.679688
+v -0.578125 0.195312 0.679688
+v 0.476562 0.101562 0.718750
+v -0.476562 0.101562 0.718750
+v 0.375000 0.062500 0.742188
+v -0.375000 0.062500 0.742188
+v 0.226562 0.109375 0.781250
+v -0.226562 0.109375 0.781250
+v 0.179688 0.296875 0.781250
+v -0.179688 0.296875 0.781250
+v 0.210938 0.375000 0.781250
+v -0.210938 0.375000 0.781250
+v 0.234375 0.359375 0.757812
+v -0.234375 0.359375 0.757812
+v 0.195312 0.296875 0.757812
+v -0.195312 0.296875 0.757812
+v 0.242188 0.125000 0.757812
+v -0.242188 0.125000 0.757812
+v 0.375000 0.085938 0.726562
+v -0.375000 0.085938 0.726562
+v 0.460938 0.117188 0.703125
+v -0.460938 0.117188 0.703125
+v 0.546875 0.210938 0.671875
+v -0.546875 0.210938 0.671875
+v 0.554688 0.281250 0.671875
+v -0.554688 0.281250 0.671875
+v 0.531250 0.335938 0.679688
+v -0.531250 0.335938 0.679688
+v 0.414062 0.390625 0.750000
+v -0.414062 0.390625 0.750000
+v 0.281250 0.398438 0.765625
+v -0.281250 0.398438 0.765625
+v 0.335938 0.406250 0.750000
+v -0.335938 0.406250 0.750000
+v 0.203125 0.171875 0.750000
+v -0.203125 0.171875 0.750000
+v 0.195312 0.226562 0.750000
+v -0.195312 0.226562 0.750000
+v 0.109375 0.460938 0.609375
+v -0.109375 0.460938 0.609375
+v 0.195312 0.664062 0.617188
+v -0.195312 0.664062 0.617188
+v 0.335938 0.687500 0.593750
+v -0.335938 0.687500 0.593750
+v 0.484375 0.554688 0.554688
+v -0.484375 0.554688 0.554688
+v 0.679688 0.453125 0.492188
+v -0.679688 0.453125 0.492188
+v 0.796875 0.406250 0.460938
+v -0.796875 0.406250 0.460938
+v 0.773438 0.164062 0.375000
+v -0.773438 0.164062 0.375000
+v 0.601562 0.000000 0.414062
+v -0.601562 0.000000 0.414062
+v 0.437500 -0.093750 0.468750
+v -0.437500 -0.093750 0.468750
+v 0.000000 0.898438 0.289062
+v 0.000000 0.984375 -0.078125
+v 0.000000 -0.195312 -0.671875
+v 0.000000 -0.460938 0.187500
+v 0.000000 -0.976562 0.460938
+v 0.000000 -0.804688 0.343750
+v 0.000000 -0.570312 0.320312
+v 0.000000 -0.484375 0.281250
+v 0.851562 0.234375 0.054688
+v -0.851562 0.234375 0.054688
+v 0.859375 0.320312 -0.046875
+v -0.859375 0.320312 -0.046875
+v 0.773438 0.265625 -0.437500
+v -0.773438 0.265625 -0.437500
+v 0.460938 0.437500 -0.703125
+v -0.460938 0.437500 -0.703125
+v 0.734375 -0.046875 0.070312
+v -0.734375 -0.046875 0.070312
+v 0.593750 -0.125000 -0.164062
+v -0.593750 -0.125000 -0.164062
+v 0.640625 -0.007812 -0.429688
+v -0.640625 -0.007812 -0.429688
+v 0.335938 0.054688 -0.664062
+v -0.335938 0.054688 -0.664062
+v 0.234375 -0.351562 0.406250
+v -0.234375 -0.351562 0.406250
+v 0.179688 -0.414062 0.257812
+v -0.179688 -0.414062 0.257812
+v 0.289062 -0.710938 0.382812
+v -0.289062 -0.710938 0.382812
+v 0.250000 -0.500000 0.390625
+v -0.250000 -0.500000 0.390625
+v 0.328125 -0.914062 0.398438
+v -0.328125 -0.914062 0.398438
+v 0.140625 -0.757812 0.367188
+v -0.140625 -0.757812 0.367188
+v 0.125000 -0.539062 0.359375
+v -0.125000 -0.539062 0.359375
+v 0.164062 -0.945312 0.437500
+v -0.164062 -0.945312 0.437500
+v 0.218750 -0.281250 0.429688
+v -0.218750 -0.281250 0.429688
+v 0.210938 -0.226562 0.468750
+v -0.210938 -0.226562 0.468750
+v 0.203125 -0.171875 0.500000
+v -0.203125 -0.171875 0.500000
+v 0.210938 -0.390625 0.164062
+v -0.210938 -0.390625 0.164062
+v 0.296875 -0.312500 -0.265625
+v -0.296875 -0.312500 -0.265625
+v 0.343750 -0.148438 -0.539062
+v -0.343750 -0.148438 -0.539062
+v 0.453125 0.867188 -0.382812
+v -0.453125 0.867188 -0.382812
+v 0.453125 0.929688 -0.070312
+v -0.453125 0.929688 -0.070312
+v 0.453125 0.851562 0.234375
+v -0.453125 0.851562 0.234375
+v 0.460938 0.523438 0.429688
+v -0.460938 0.523438 0.429688
+v 0.726562 0.406250 0.335938
+v -0.726562 0.406250 0.335938
+v 0.632812 0.453125 0.281250
+v -0.632812 0.453125 0.281250
+v 0.640625 0.703125 0.054688
+v -0.640625 0.703125 0.054688
+v 0.796875 0.562500 0.125000
+v -0.796875 0.562500 0.125000
+v 0.796875 0.617188 -0.117188
+v -0.796875 0.617188 -0.117188
+v 0.640625 0.750000 -0.195312
+v -0.640625 0.750000 -0.195312
+v 0.640625 0.679688 -0.445312
+v -0.640625 0.679688 -0.445312
+v 0.796875 0.539062 -0.359375
+v -0.796875 0.539062 -0.359375
+v 0.617188 0.328125 -0.585938
+v -0.617188 0.328125 -0.585938
+v 0.484375 0.023438 -0.546875
+v -0.484375 0.023438 -0.546875
+v 0.820312 0.328125 -0.203125
+v -0.820312 0.328125 -0.203125
+v 0.406250 -0.171875 0.148438
+v -0.406250 -0.171875 0.148438
+v 0.429688 -0.195312 -0.210938
+v -0.429688 -0.195312 -0.210938
+v 0.890625 0.406250 -0.234375
+v -0.890625 0.406250 -0.234375
+v 0.773438 -0.140625 -0.125000
+v -0.773438 -0.140625 -0.125000
+v 1.039062 -0.101562 -0.328125
+v -1.039062 -0.101562 -0.328125
+v 1.281250 0.054688 -0.429688
+v -1.281250 0.054688 -0.429688
+v 1.351562 0.320312 -0.421875
+v -1.351562 0.320312 -0.421875
+v 1.234375 0.507812 -0.421875
+v -1.234375 0.507812 -0.421875
+v 1.023438 0.476562 -0.312500
+v -1.023438 0.476562 -0.312500
+v 1.015625 0.414062 -0.289062
+v -1.015625 0.414062 -0.289062
+v 1.187500 0.437500 -0.390625
+v -1.187500 0.437500 -0.390625
+v 1.265625 0.289062 -0.406250
+v -1.265625 0.289062 -0.406250
+v 1.210938 0.078125 -0.406250
+v -1.210938 0.078125 -0.406250
+v 1.031250 -0.039062 -0.304688
+v -1.031250 -0.039062 -0.304688
+v 0.828125 -0.070312 -0.132812
+v -0.828125 -0.070312 -0.132812
+v 0.921875 0.359375 -0.218750
+v -0.921875 0.359375 -0.218750
+v 0.945312 0.304688 -0.289062
+v -0.945312 0.304688 -0.289062
+v 0.882812 -0.023438 -0.210938
+v -0.882812 -0.023438 -0.210938
+v 1.039062 0.000000 -0.367188
+v -1.039062 0.000000 -0.367188
+v 1.187500 0.093750 -0.445312
+v -1.187500 0.093750 -0.445312
+v 1.234375 0.250000 -0.445312
+v -1.234375 0.250000 -0.445312
+v 1.171875 0.359375 -0.437500
+v -1.171875 0.359375 -0.437500
+v 1.023438 0.343750 -0.359375
+v -1.023438 0.343750 -0.359375
+v 0.843750 0.289062 -0.210938
+v -0.843750 0.289062 -0.210938
+v 0.835938 0.171875 -0.273438
+v -0.835938 0.171875 -0.273438
+v 0.757812 0.093750 -0.273438
+v -0.757812 0.093750 -0.273438
+v 0.820312 0.085938 -0.273438
+v -0.820312 0.085938 -0.273438
+v 0.843750 0.015625 -0.273438
+v -0.843750 0.015625 -0.273438
+v 0.812500 -0.015625 -0.273438
+v -0.812500 -0.015625 -0.273438
+v 0.726562 0.000000 -0.070312
+v -0.726562 0.000000 -0.070312
+v 0.718750 -0.023438 -0.171875
+v -0.718750 -0.023438 -0.171875
+v 0.718750 0.039062 -0.187500
+v -0.718750 0.039062 -0.187500
+v 0.796875 0.203125 -0.210938
+v -0.796875 0.203125 -0.210938
+v 0.890625 0.242188 -0.265625
+v -0.890625 0.242188 -0.265625
+v 0.890625 0.234375 -0.320312
+v -0.890625 0.234375 -0.320312
+v 0.812500 -0.015625 -0.320312
+v -0.812500 -0.015625 -0.320312
+v 0.851562 0.015625 -0.320312
+v -0.851562 0.015625 -0.320312
+v 0.828125 0.078125 -0.320312
+v -0.828125 0.078125 -0.320312
+v 0.765625 0.093750 -0.320312
+v -0.765625 0.093750 -0.320312
+v 0.843750 0.171875 -0.320312
+v -0.843750 0.171875 -0.320312
+v 1.039062 0.328125 -0.414062
+v -1.039062 0.328125 -0.414062
+v 1.187500 0.343750 -0.484375
+v -1.187500 0.343750 -0.484375
+v 1.257812 0.242188 -0.492188
+v -1.257812 0.242188 -0.492188
+v 1.210938 0.085938 -0.484375
+v -1.210938 0.085938 -0.484375
+v 1.046875 0.000000 -0.421875
+v -1.046875 0.000000 -0.421875
+v 0.882812 -0.015625 -0.265625
+v -0.882812 -0.015625 -0.265625
+v 0.953125 0.289062 -0.343750
+v -0.953125 0.289062 -0.343750
+v 0.890625 0.109375 -0.328125
+v -0.890625 0.109375 -0.328125
+v 0.937500 0.062500 -0.335938
+v -0.937500 0.062500 -0.335938
+v 1.000000 0.125000 -0.367188
+v -1.000000 0.125000 -0.367188
+v 0.960938 0.171875 -0.351562
+v -0.960938 0.171875 -0.351562
+v 1.015625 0.234375 -0.375000
+v -1.015625 0.234375 -0.375000
+v 1.054688 0.187500 -0.382812
+v -1.054688 0.187500 -0.382812
+v 1.109375 0.210938 -0.390625
+v -1.109375 0.210938 -0.390625
+v 1.085938 0.273438 -0.390625
+v -1.085938 0.273438 -0.390625
+v 1.023438 0.437500 -0.484375
+v -1.023438 0.437500 -0.484375
+v 1.250000 0.468750 -0.546875
+v -1.250000 0.468750 -0.546875
+v 1.367188 0.296875 -0.500000
+v -1.367188 0.296875 -0.500000
+v 1.312500 0.054688 -0.531250
+v -1.312500 0.054688 -0.531250
+v 1.039062 -0.085938 -0.492188
+v -1.039062 -0.085938 -0.492188
+v 0.789062 -0.125000 -0.328125
+v -0.789062 -0.125000 -0.328125
+v 0.859375 0.382812 -0.382812
+v -0.859375 0.382812 -0.382812
+vt 0.890955 0.590063
+vt 0.870622 0.589649
+vt 0.860081 0.560115
+vt 0.904571 0.559404
+vt 0.856226 0.850547
+vt 0.868067 0.821510
+vt 0.888398 0.821999
+vt 0.900640 0.853232
+vt 0.853018 0.521562
+vt 0.920166 0.524546
+vt 0.847458 0.888748
+vt 0.914672 0.888748
+vt 0.828900 0.590771
+vt 0.798481 0.569535
+vt 0.795104 0.838402
+vt 0.826436 0.818537
+vt 0.854402 0.604754
+vt 0.852534 0.805700
+vt 0.854107 0.625459
+vt 0.828171 0.633354
+vt 0.827598 0.775964
+vt 0.853157 0.785002
+vt 0.791018 0.645443
+vt 0.791018 0.762238
+vt 0.855181 0.668527
+vt 0.842358 0.702491
+vt 0.844839 0.707525
+vt 0.856142 0.742025
+vt 0.867508 0.642291
+vt 0.867293 0.768782
+vt 0.890474 0.641909
+vt 0.900375 0.666964
+vt 0.901223 0.745592
+vt 0.890219 0.770183
+vt 0.918898 0.699697
+vt 0.921180 0.713713
+vt 0.931889 0.636832
+vt 0.968392 0.645333
+vt 0.968213 0.770220
+vt 0.931368 0.777093
+vt 0.905882 0.627902
+vt 0.904990 0.784860
+vt 0.906232 0.605742
+vt 0.933717 0.593037
+vt 0.931250 0.820926
+vt 0.904357 0.807013
+vt 0.968392 0.573812
+vt 0.965038 0.841671
+vt 0.902359 0.607909
+vt 0.889591 0.593275
+vt 0.900583 0.804677
+vt 0.887178 0.818729
+vt 0.899781 0.626257
+vt 0.898822 0.786233
+vt 0.887842 0.636527
+vt 0.887351 0.775442
+vt 0.870908 0.635245
+vt 0.870376 0.775972
+vt 0.859881 0.623942
+vt 0.858859 0.786774
+vt 0.859664 0.608186
+vt 0.857942 0.802505
+vt 0.871664 0.593961
+vt 0.869299 0.817249
+vt 0.879400 0.616512
+vt 0.878029 0.795063
+vt 0.540260 0.053805
+vt 0.536419 0.062072
+vt 0.518925 0.059681
+vt 0.518916 0.050294
+vt 0.501452 0.062043
+vt 0.497626 0.053770
+vt 0.551930 0.058338
+vt 0.542788 0.064089
+vt 0.495083 0.064047
+vt 0.485955 0.058273
+vt 0.555073 0.061900
+vt 0.546290 0.072669
+vt 0.491565 0.072625
+vt 0.482805 0.061829
+vt 0.563812 0.076586
+vt 0.548333 0.084893
+vt 0.489507 0.084858
+vt 0.474014 0.076511
+vt 0.583135 0.108495
+vt 0.555621 0.121749
+vt 0.482177 0.121781
+vt 0.454527 0.108481
+vt 0.605512 0.165134
+vt 0.647395 0.200502
+vt 0.621513 0.227818
+vt 0.553118 0.209599
+vt 0.416514 0.229490
+vt 0.389677 0.201890
+vt 0.432024 0.165644
+vt 0.485339 0.210053
+vt 0.676379 0.233241
+vt 0.664761 0.253225
+vt 0.372747 0.256357
+vt 0.360308 0.235899
+vt 0.715342 0.265392
+vt 0.683908 0.279995
+vt 0.353696 0.284606
+vt 0.320452 0.270303
+vt 0.707254 0.310054
+vt 0.687515 0.311539
+vt 0.351187 0.317440
+vt 0.330721 0.316853
+vt 0.697446 0.332673
+vt 0.676824 0.323937
+vt 0.362723 0.329722
+vt 0.341964 0.339667
+vt 0.662817 0.372521
+vt 0.639050 0.357330
+vt 0.402772 0.362131
+vt 0.379297 0.378686
+vt 0.626842 0.395792
+vt 0.618316 0.375151
+vt 0.424583 0.379267
+vt 0.416915 0.400552
+vt 0.604826 0.397804
+vt 0.600808 0.377857
+vt 0.442396 0.381222
+vt 0.439252 0.401540
+vt 0.553095 0.390512
+vt 0.559674 0.357011
+vt 0.482938 0.358497
+vt 0.490934 0.391862
+vt 0.521923 0.386009
+vt 0.521086 0.343868
+vt 0.577279 0.340156
+vt 0.599845 0.344815
+vt 0.441977 0.347815
+vt 0.464579 0.342230
+vt 0.615546 0.342005
+vt 0.425972 0.345582
+vt 0.634472 0.332311
+vt 0.406362 0.336480
+vt 0.662406 0.312804
+vt 0.377061 0.317685
+vt 0.668440 0.297958
+vt 0.370304 0.302644
+vt 0.664101 0.277872
+vt 0.374100 0.281778
+vt 0.639236 0.253047
+vt 0.398938 0.255633
+vt 0.613992 0.242662
+vt 0.424464 0.244473
+vt 0.572941 0.258564
+vt 0.466409 0.259709
+vt 0.563905 0.272007
+vt 0.519760 0.248864
+vt 0.475886 0.273078
+vt 0.558527 0.316594
+vt 0.482619 0.317843
+vt 0.520277 0.294764
+vt 0.556923 0.291214
+vt 0.483433 0.292249
+vt 0.525483 0.068967
+vt 0.518928 0.067899
+vt 0.512375 0.068956
+vt 0.531231 0.073829
+vt 0.506626 0.073811
+vt 0.531019 0.087431
+vt 0.506827 0.087416
+vt 0.532042 0.127713
+vt 0.532669 0.090920
+vt 0.505177 0.090908
+vt 0.505828 0.127728
+vt 0.538112 0.158382
+vt 0.518981 0.151749
+vt 0.518941 0.128358
+vt 0.499851 0.158434
+vt 0.518925 0.093952
+vt 0.518927 0.085180
+vt 0.548362 0.173560
+vt 0.537959 0.175966
+vt 0.535214 0.166808
+vt 0.502799 0.166857
+vt 0.500100 0.176033
+vt 0.489683 0.173693
+vt 0.544281 0.193366
+vt 0.537248 0.187577
+vt 0.500890 0.187571
+vt 0.493996 0.193428
+vt 0.519841 0.200843
+vt 0.528757 0.191785
+vt 0.509219 0.191626
+vt 0.517577 0.190607
+vt 0.519132 0.185382
+vt 0.518998 0.159028
+vt 0.531131 0.171631
+vt 0.519016 0.165599
+vt 0.506910 0.171667
+vt 0.519099 0.179457
+vt 0.528222 0.186316
+vt 0.509787 0.186260
+vt 0.533528 0.184215
+vt 0.504547 0.184206
+vt 0.533449 0.176739
+vt 0.504604 0.176791
+vt 0.561572 0.167779
+vt 0.476363 0.167996
+vt 0.559475 0.149319
+vt 0.478371 0.149447
+vt 0.596138 0.133426
+vt 0.441395 0.133592
+vt 0.601169 0.147885
+vt 0.436337 0.148194
+vt 0.518925 0.083865
+vt 0.528933 0.084957
+vt 0.508915 0.084945
+vt 0.529036 0.075429
+vt 0.508820 0.075415
+vt 0.523751 0.070508
+vt 0.514106 0.070501
+vt 0.518929 0.069468
+vt 0.521560 0.074970
+vt 0.518928 0.074259
+vt 0.516297 0.074966
+vt 0.524236 0.076691
+vt 0.513619 0.076684
+vt 0.524601 0.079886
+vt 0.513252 0.079879
+vt 0.518926 0.079331
+vt 0.571787 0.277295
+vt 0.568351 0.292904
+vt 0.468070 0.278617
+vt 0.471978 0.294282
+vt 0.573085 0.311386
+vt 0.467790 0.313081
+vt 0.584855 0.327708
+vt 0.456477 0.329961
+vt 0.580734 0.266620
+vt 0.458737 0.268049
+vt 0.611720 0.255725
+vt 0.427062 0.257728
+vt 0.632494 0.262853
+vt 0.406068 0.265508
+vt 0.653658 0.279971
+vt 0.384904 0.283634
+vt 0.656064 0.297636
+vt 0.383015 0.301864
+vt 0.652752 0.310186
+vt 0.386858 0.314615
+vt 0.629040 0.323864
+vt 0.411556 0.327673
+vt 0.614408 0.331972
+vt 0.426727 0.335361
+vt 0.601033 0.333624
+vt 0.440344 0.336537
+vt 0.590644 0.321516
+vt 0.601799 0.328453
+vt 0.450408 0.323919
+vt 0.439372 0.331331
+vt 0.613335 0.327083
+vt 0.427623 0.330358
+vt 0.626851 0.320513
+vt 0.413648 0.324175
+vt 0.646248 0.306421
+vt 0.393381 0.310510
+vt 0.649541 0.296225
+vt 0.389662 0.300183
+vt 0.647785 0.283486
+vt 0.391040 0.287071
+vt 0.629829 0.267263
+vt 0.408893 0.269959
+vt 0.612641 0.261560
+vt 0.426254 0.263693
+vt 0.585166 0.270991
+vt 0.454369 0.272583
+vt 0.578124 0.281900
+vt 0.461798 0.283441
+vt 0.579548 0.309340
+vt 0.461204 0.311233
+vt 0.577524 0.293776
+vt 0.462754 0.295432
+vt 0.553209 0.433063
+vt 0.523031 0.433628
+vt 0.492809 0.434538
+vt 0.609819 0.431516
+vt 0.435860 0.435740
+vt 0.648174 0.419316
+vt 0.396518 0.425416
+vt 0.692106 0.388274
+vt 0.350292 0.396229
+vt 0.726332 0.341754
+vt 0.312756 0.350588
+vt 0.735879 0.312112
+vt 0.301067 0.320593
+vt 0.729900 0.256393
+vt 0.304876 0.261087
+vt 0.698172 0.216906
+vt 0.337414 0.219179
+vt 0.663103 0.190671
+vt 0.373474 0.191872
+vt 0.626908 0.015608
+vt 0.649444 0.022378
+vt 0.660451 0.076084
+vt 0.621440 0.048089
+vt 0.376796 0.075296
+vt 0.388827 0.021586
+vt 0.411318 0.015131
+vt 0.416419 0.047631
+vt 0.567460 0.000144
+vt 0.577206 0.032801
+vt 0.470636 0.000144
+vt 0.460782 0.032656
+vt 0.518922 0.024886
+vt 0.547413 0.041724
+vt 0.490511 0.041669
+vt 0.558059 0.053871
+vt 0.479842 0.053785
+vt 0.576951 0.057998
+vt 0.460920 0.057845
+vt 0.611687 0.078268
+vt 0.425932 0.077985
+vt 0.626663 0.111357
+vt 0.410618 0.111244
+vt 0.629482 0.130456
+vt 0.623495 0.146796
+vt 0.413741 0.147158
+vt 0.407648 0.130594
+vt 0.619303 0.159841
+vt 0.418035 0.160361
+vt 0.945900 0.079569
+vt 0.886245 0.121777
+vt 0.849114 0.099732
+vt 0.891780 0.036916
+vt 0.183115 0.092127
+vt 0.141314 0.112482
+vt 0.078961 0.060719
+vt 0.142277 0.021467
+vt 0.788458 0.080826
+vt 0.805584 0.010786
+vt 0.246353 0.076510
+vt 0.232648 0.003484
+vt 0.687018 0.077204
+vt 0.672384 0.022201
+vt 0.349875 0.075955
+vt 0.365979 0.020991
+vt 0.760215 0.193244
+vt 0.789046 0.233323
+vt 0.271553 0.193871
+vt 0.241255 0.236977
+vt 0.994525 0.167705
+vt 0.909112 0.183261
+vt 0.107928 0.179083
+vt 0.011829 0.155367
+vt 0.911671 0.402429
+vt 0.862868 0.338556
+vt 0.894128 0.301884
+vt 0.962901 0.344752
+vt 0.123776 0.315519
+vt 0.160557 0.356821
+vt 0.106400 0.432652
+vt 0.043968 0.367038
+vt 0.915360 0.259804
+vt 0.999856 0.254640
+vt 0.098965 0.266968
+vt 0.000144 0.259113
+vt 0.749542 0.334683
+vt 0.766337 0.300809
+vt 0.789162 0.313727
+vt 0.267408 0.310142
+vt 0.288183 0.346496
+vt 0.242992 0.325552
+vt 0.815314 0.276388
+vt 0.846174 0.293397
+vt 0.213065 0.285164
+vt 0.178537 0.304983
+vt 0.845007 0.256352
+vt 0.873517 0.265922
+vt 0.179662 0.263312
+vt 0.147089 0.274284
+vt 0.859075 0.228168
+vt 0.886999 0.233769
+vt 0.162803 0.231720
+vt 0.131514 0.237587
+vt 0.842355 0.195160
+vt 0.875030 0.184705
+vt 0.145224 0.182749
+vt 0.176788 0.196179
+vt 0.794286 0.364062
+vt 0.239776 0.382592
+vt 0.770185 0.379538
+vt 0.268122 0.398737
+vt 0.845499 0.449967
+vt 0.185281 0.484099
+vt 0.815858 0.445381
+vt 0.770572 0.444261
+vt 0.755700 0.418603
+vt 0.287033 0.442912
+vt 0.271364 0.473316
+vt 0.219260 0.477186
+vt 0.819845 0.468071
+vt 0.215894 0.503605
+vt 0.809631 0.233887
+vt 0.219168 0.237388
+vt 0.829287 0.219562
+vt 0.199067 0.222464
+vt 0.786480 0.117591
+vt 0.715482 0.139727
+vt 0.246666 0.114850
+vt 0.319538 0.139409
+vt 0.785486 0.152330
+vt 0.245969 0.151002
+vt 0.837382 0.156361
+vt 0.858171 0.137775
+vt 0.171653 0.132294
+vt 0.196622 0.155241
+vt 0.506166 0.904851
+vt 0.432388 0.894943
+vt 0.438797 0.870229
+vt 0.491058 0.881714
+vt 0.315867 0.868209
+vt 0.321637 0.893225
+vt 0.247207 0.901159
+vt 0.263032 0.878321
+vt 0.572792 0.860484
+vt 0.604825 0.879946
+vt 0.181486 0.854693
+vt 0.148729 0.873349
+vt 0.586396 0.793977
+vt 0.619962 0.791615
+vt 0.169745 0.787474
+vt 0.136063 0.784093
+vt 0.549027 0.746412
+vt 0.563786 0.739211
+vt 0.208656 0.740879
+vt 0.194086 0.733241
+vt 0.500314 0.711729
+vt 0.508270 0.697693
+vt 0.258399 0.707497
+vt 0.250811 0.693249
+vt 0.438641 0.680683
+vt 0.434803 0.658882
+vt 0.320962 0.677959
+vt 0.325318 0.656224
+vt 0.505666 0.730944
+vt 0.452955 0.700023
+vt 0.306136 0.696976
+vt 0.252524 0.726592
+vt 0.542850 0.755753
+vt 0.214575 0.750414
+vt 0.568148 0.787367
+vt 0.188269 0.781375
+vt 0.555495 0.826352
+vt 0.199850 0.820889
+vt 0.501231 0.844356
+vt 0.253846 0.840502
+vt 0.457832 0.840040
+vt 0.297562 0.837358
+vt 0.796021 0.176969
+vt 0.783193 0.187449
+vt 0.233625 0.175620
+vt 0.246955 0.187075
+vt 0.391039 0.611891
+vt 0.394766 0.686125
+vt 0.369913 0.610196
+vt 0.364838 0.684445
+vt 0.391747 0.862097
+vt 0.401605 0.841460
+vt 0.354026 0.840297
+vt 0.363377 0.861308
+vt 0.435018 0.718280
+vt 0.323658 0.715731
+vt 0.433669 0.729661
+vt 0.384658 0.710299
+vt 0.374400 0.708969
+vt 0.324726 0.727177
+vt 0.410995 0.747662
+vt 0.427812 0.742828
+vt 0.347028 0.745816
+vt 0.330270 0.740536
+vt 0.418086 0.784946
+vt 0.384657 0.795423
+vt 0.372270 0.794472
+vt 0.338952 0.783073
+vt 0.431333 0.817535
+vt 0.324790 0.815460
+vt 0.816266 0.203086
+vt 0.825107 0.209762
+vt 0.199767 0.214827
+vt 0.209828 0.206161
+vt 0.802192 0.184609
+vt 0.226485 0.183086
+vt 0.448505 0.804621
+vt 0.473386 0.824700
+vt 0.307886 0.802031
+vt 0.282357 0.821525
+vt 0.435868 0.779569
+vt 0.321237 0.777208
+vt 0.423718 0.754191
+vt 0.334089 0.752045
+vt 0.437950 0.749777
+vt 0.319919 0.747250
+vt 0.445392 0.731997
+vt 0.312907 0.729222
+vt 0.440995 0.724383
+vt 0.317510 0.721697
+vt 0.455277 0.713731
+vt 0.303460 0.710657
+vt 0.512485 0.828811
+vt 0.242975 0.824574
+vt 0.550942 0.811814
+vt 0.204839 0.806417
+vt 0.552139 0.787682
+vt 0.204331 0.782156
+vt 0.539407 0.764539
+vt 0.217774 0.759319
+vt 0.508439 0.743135
+vt 0.249419 0.738732
+vt 0.470841 0.748408
+vt 0.454776 0.761665
+vt 0.286960 0.745020
+vt 0.302729 0.758742
+vt 0.488870 0.770464
+vt 0.475403 0.783904
+vt 0.268291 0.766661
+vt 0.281439 0.780511
+vt 0.503673 0.787562
+vt 0.494476 0.802470
+vt 0.252972 0.783410
+vt 0.261790 0.798626
+vt 0.518562 0.791602
+vt 0.516802 0.807339
+vt 0.237920 0.787045
+vt 0.239243 0.802891
+vt 0.484068 0.628776
+vt 0.543385 0.683538
+vt 0.276936 0.625067
+vt 0.216123 0.678120
+vt 0.581052 0.726933
+vt 0.177176 0.720426
+vt 0.616701 0.759965
+vt 0.140379 0.752377
+vt 0.707492 0.759884
+vt 0.660647 0.741167
+vt 0.049526 0.748824
+vt 0.097038 0.732052
+vt 0.745511 0.652100
+vt 0.677256 0.670436
+vt 0.019409 0.639749
+vt 0.083564 0.662038
+vt 0.740843 0.572428
+vt 0.671403 0.592656
+vt 0.033664 0.564403
+vt 0.092820 0.589862
+vt 0.834578 0.206879
+vt 0.834705 0.206959
+vt 0.051216 0.522659
+vt 0.145041 0.562595
+vt 0.620420 0.565675
+vt 0.498072 0.552315
+vt 0.264218 0.550140
+vn 0.6650 -0.2008 0.7194
+vn -0.6650 -0.2008 0.7194
+vn 0.8294 -0.3036 0.4689
+vn -0.8294 -0.3036 0.4689
+vn 0.4155 -0.7933 0.4449
+vn -0.4155 -0.7933 0.4449
+vn 0.3600 -0.5089 0.7820
+vn -0.3600 -0.5089 0.7820
+vn -0.0787 -0.5394 0.8384
+vn 0.0787 -0.5394 0.8384
+vn -0.2696 -0.8413 0.4685
+vn 0.2696 -0.8413 0.4685
+vn -0.7707 -0.3352 0.5420
+vn 0.7707 -0.3352 0.5420
+vn -0.4689 -0.1940 0.8617
+vn 0.4689 -0.1940 0.8617
+vn -0.4767 0.1907 0.8581
+vn 0.4767 0.1907 0.8581
+vn -0.7672 0.3264 0.5521
+vn 0.7672 0.3264 0.5521
+vn -0.2519 0.8173 0.5182
+vn 0.2519 0.8173 0.5182
+vn -0.0949 0.5696 0.8164
+vn 0.0949 0.5696 0.8164
+vn 0.3667 0.5370 0.7597
+vn -0.3667 0.5370 0.7597
+vn 0.4141 0.7672 0.4898
+vn -0.4141 0.7672 0.4898
+vn 0.8277 0.2952 0.4771
+vn -0.8277 0.2952 0.4771
+vn 0.6713 0.1971 0.7145
+vn -0.6713 0.1971 0.7145
+vn 0.8111 0.3244 -0.4867
+vn -0.8111 0.3244 -0.4867
+vn 0.2052 0.8206 -0.5334
+vn -0.2052 0.8206 -0.5334
+vn -0.4223 0.7806 -0.4607
+vn 0.4223 0.7806 -0.4607
+vn -0.8241 0.3225 -0.4658
+vn 0.8241 0.3225 -0.4658
+vn -0.8137 -0.3487 -0.4650
+vn 0.8137 -0.3487 -0.4650
+vn -0.4223 -0.7806 -0.4607
+vn 0.4223 -0.7806 -0.4607
+vn 0.2052 -0.8206 -0.5334
+vn -0.2052 -0.8206 -0.5334
+vn 0.7995 -0.3510 -0.4875
+vn -0.7995 -0.3510 -0.4875
+vn 0.4000 -0.0623 0.9144
+vn -0.4000 -0.0623 0.9144
+vn 0.3069 -0.1754 0.9354
+vn -0.3069 -0.1754 0.9354
+vn 0.0945 -0.1835 0.9785
+vn -0.0945 -0.1835 0.9785
+vn -0.0624 -0.0283 0.9977
+vn 0.0624 -0.0283 0.9977
+vn -0.0624 0.0260 0.9977
+vn 0.0624 0.0260 0.9977
+vn 0.0996 0.1729 0.9799
+vn -0.0996 0.1729 0.9799
+vn 0.3036 0.1656 0.9383
+vn -0.3036 0.1656 0.9383
+vn 0.4002 0.0572 0.9147
+vn -0.4002 0.0572 0.9147
+vn 0.1231 -0.8616 0.4924
+vn -0.1231 -0.8616 0.4924
+vn 0.2190 -0.8647 0.4520
+vn -0.2190 -0.8647 0.4520
+vn 0.5902 -0.4550 0.6668
+vn -0.5902 -0.4550 0.6668
+vn 0.7689 -0.0506 0.6374
+vn -0.7689 -0.0506 0.6374
+vn 0.7796 0.0900 0.6197
+vn -0.7796 0.0900 0.6197
+vn 0.3241 -0.8188 0.4739
+vn -0.3241 -0.8188 0.4739
+vn 0.3857 -0.6629 0.6417
+vn -0.3857 -0.6629 0.6417
+vn 0.6895 -0.4193 0.5906
+vn -0.6895 -0.4193 0.5906
+vn 0.6588 -0.3634 0.6588
+vn -0.6588 -0.3634 0.6588
+vn 0.5465 0.3707 0.7509
+vn -0.5465 0.3707 0.7509
+vn 0.5064 0.6464 0.5706
+vn -0.5064 0.6464 0.5706
+vn 0.6092 0.5167 0.6015
+vn -0.6092 0.5167 0.6015
+vn -0.0441 0.6610 0.7491
+vn 0.0441 0.6610 0.7491
+vn -0.7246 0.3187 0.6110
+vn 0.7246 0.3187 0.6110
+vn -0.5880 0.5554 0.5880
+vn 0.5880 0.5554 0.5880
+vn 0.5361 -0.3909 0.7482
+vn -0.5361 -0.3909 0.7482
+vn 0.2207 -0.4690 0.8552
+vn -0.2207 -0.4690 0.8552
+vn -0.0794 -0.5321 0.8429
+vn 0.0794 -0.5321 0.8429
+vn -0.0825 -0.6575 0.7490
+vn 0.0825 -0.6575 0.7490
+vn 0.0457 -0.5667 0.8226
+vn -0.0457 -0.5667 0.8226
+vn 0.2784 -0.2130 0.9365
+vn -0.2784 -0.2130 0.9365
+vn 0.3813 -0.1824 0.9063
+vn -0.3813 -0.1824 0.9063
+vn 0.3357 -0.2878 0.8969
+vn -0.3357 -0.2878 0.8969
+vn 0.3762 0.0603 0.9246
+vn -0.3762 0.0603 0.9246
+vn -0.1352 0.2680 0.9539
+vn 0.1352 0.2680 0.9539
+vn 0.3961 -0.4321 0.8102
+vn -0.3961 -0.4321 0.8102
+vn 0.1856 -0.2474 0.9510
+vn -0.1856 -0.2474 0.9510
+vn 0.0099 -0.1948 0.9808
+vn -0.0099 -0.1948 0.9808
+vn 0.0721 -0.6966 0.7138
+vn -0.0721 -0.6966 0.7138
+vn 0.1863 -0.5723 0.7986
+vn -0.1863 -0.5723 0.7986
+vn 0.3157 -0.2708 0.9094
+vn -0.3157 -0.2708 0.9094
+vn 0.3063 -0.0265 0.9516
+vn -0.3063 -0.0265 0.9516
+vn 0.3266 -0.1306 0.9361
+vn -0.3266 -0.1306 0.9361
+vn -0.0137 0.0574 0.9983
+vn 0.0137 0.0574 0.9983
+vn -0.0026 -0.0656 0.9978
+vn 0.0026 -0.0656 0.9978
+vn 0.0000 0.0000 1.0000
+vn 0.8174 -0.5744 -0.0442
+vn -0.8174 -0.5744 -0.0442
+vn 0.9494 0.2297 -0.2144
+vn -0.9494 0.2297 -0.2144
+vn 0.0825 0.9073 -0.4124
+vn -0.0825 0.9073 -0.4124
+vn -0.8836 0.3555 0.3047
+vn 0.8836 0.3555 0.3047
+vn 0.4207 -0.8797 0.2218
+vn -0.4207 -0.8797 0.2218
+vn 0.2873 -0.5747 0.7663
+vn -0.2873 -0.5747 0.7663
+vn -0.6542 0.6019 0.4580
+vn 0.6542 0.6019 0.4580
+vn 0.1052 0.7892 0.6051
+vn -0.1052 0.7892 0.6051
+vn 0.7582 0.2916 0.5832
+vn -0.7582 0.2916 0.5832
+vn 0.3889 -0.7130 0.5834
+vn -0.3889 -0.7130 0.5834
+vn 0.0463 0.2314 0.9718
+vn -0.0463 0.2314 0.9718
+vn 0.0335 -0.4018 0.9151
+vn -0.0335 -0.4018 0.9151
+vn -0.4452 -0.1610 0.8809
+vn 0.4452 -0.1610 0.8809
+vn -0.2182 -0.4364 0.8729
+vn 0.2182 -0.4364 0.8729
+vn 0.4341 -0.1290 0.8916
+vn -0.4341 -0.1290 0.8916
+vn 0.3008 0.0501 0.9524
+vn -0.3008 0.0501 0.9524
+vn 0.8123 0.3010 0.4996
+vn -0.8123 0.3010 0.4996
+vn 0.8753 0.2574 0.4093
+vn -0.8753 0.2574 0.4093
+vn 0.9385 0.1601 0.3060
+vn -0.9385 0.1601 0.3060
+vn 0.2237 -0.6539 0.7227
+vn -0.2237 -0.6539 0.7227
+vn -0.1536 -0.1997 0.9677
+vn 0.1536 -0.1997 0.9677
+vn -0.2733 -0.1025 0.9565
+vn 0.2733 -0.1025 0.9565
+vn -0.0976 0.1952 0.9759
+vn 0.0976 0.1952 0.9759
+vn -0.1582 0.9494 0.2713
+vn 0.1582 0.9494 0.2713
+vn -0.6934 0.7082 0.1328
+vn 0.6934 0.7082 0.1328
+vn -1.0000 0.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.3051 -0.9450 0.1181
+vn -0.3051 -0.9450 0.1181
+vn 0.0298 -0.2981 0.9541
+vn -0.0298 -0.2981 0.9541
+vn 0.1353 -0.3479 0.9277
+vn -0.1353 -0.3479 0.9277
+vn -0.5085 -0.2755 0.8158
+vn 0.5085 -0.2755 0.8158
+vn -0.3843 -0.0419 0.9223
+vn 0.3843 -0.0419 0.9223
+vn -0.2083 0.0374 0.9774
+vn 0.2083 0.0374 0.9774
+vn -0.5721 -0.4767 0.6674
+vn 0.5721 -0.4767 0.6674
+vn -0.1369 -0.7531 0.6435
+vn 0.1369 -0.7531 0.6435
+vn 0.4088 -0.6071 0.6814
+vn -0.4088 -0.6071 0.6814
+vn 0.5740 -0.4130 0.7070
+vn -0.5740 -0.4130 0.7070
+vn 0.5665 -0.0968 0.8183
+vn -0.5665 -0.0968 0.8183
+vn 0.5703 0.1180 0.8129
+vn -0.5703 0.1180 0.8129
+vn 0.4823 0.5621 0.6719
+vn -0.4823 0.5621 0.6719
+vn 0.2604 0.6114 0.7473
+vn -0.2604 0.6114 0.7473
+vn 0.1640 0.3607 0.9182
+vn -0.1640 0.3607 0.9182
+vn -0.0178 0.2495 0.9682
+vn 0.0178 0.2495 0.9682
+vn 0.3273 -0.4166 0.8481
+vn -0.3273 -0.4166 0.8481
+vn 0.2811 -0.2610 0.9235
+vn -0.2811 -0.2610 0.9235
+vn -0.2542 -0.6514 0.7149
+vn 0.2542 -0.6514 0.7149
+vn -0.0260 -0.8455 0.5333
+vn 0.0260 -0.8455 0.5333
+vn -0.3518 -0.2606 0.8991
+vn 0.3518 -0.2606 0.8991
+vn -0.3523 -0.0110 0.9358
+vn 0.3523 -0.0110 0.9358
+vn -0.1317 0.4608 0.8777
+vn 0.1317 0.4608 0.8777
+vn -0.0342 0.6159 0.7870
+vn 0.0342 0.6159 0.7870
+vn 0.3603 0.5836 0.7277
+vn -0.3603 0.5836 0.7277
+vn 0.4988 0.5300 0.6858
+vn -0.4988 0.5300 0.6858
+vn 0.6667 -0.3333 0.6667
+vn -0.6667 -0.3333 0.6667
+vn 0.8165 -0.0731 0.5727
+vn -0.8165 -0.0731 0.5727
+vn 0.7840 0.1161 0.6098
+vn -0.7840 0.1161 0.6098
+vn -0.5306 0.8111 -0.2461
+vn 0.5306 0.8111 -0.2461
+vn -0.8511 0.3695 -0.3730
+vn 0.8511 0.3695 -0.3730
+vn -0.2446 0.8675 -0.4331
+vn 0.2446 0.8675 -0.4331
+vn 0.5924 0.7465 -0.3030
+vn -0.5924 0.7465 -0.3030
+vn 0.3685 0.8758 -0.3118
+vn -0.3685 0.8758 -0.3118
+vn 0.2821 0.9151 -0.2880
+vn -0.2821 0.9151 -0.2880
+vn 0.8561 0.1340 -0.4991
+vn -0.8561 0.1340 -0.4991
+vn 0.5342 -0.7233 -0.4376
+vn -0.5342 -0.7233 -0.4376
+vn 0.3849 -0.8131 -0.4368
+vn -0.3849 -0.8131 -0.4368
+vn 0.2335 -0.5806 -0.7800
+vn -0.2335 -0.5806 -0.7800
+vn 0.2449 -0.0583 -0.9678
+vn -0.2449 -0.0583 -0.9678
+vn 0.1163 -0.4535 -0.8837
+vn -0.1163 -0.4535 -0.8837
+vn 0.1152 -0.9836 -0.1388
+vn -0.1152 -0.9836 -0.1388
+vn 0.1184 -0.9669 -0.2260
+vn -0.1184 -0.9669 -0.2260
+vn 0.9597 -0.0085 -0.2808
+vn -0.9597 -0.0085 -0.2808
+vn 0.9319 0.1629 -0.3242
+vn -0.9319 0.1629 -0.3242
+vn 0.1626 0.0207 -0.9865
+vn -0.1626 0.0207 -0.9865
+vn -0.0188 -0.2177 -0.9758
+vn 0.0188 -0.2177 -0.9758
+vn 0.7538 -0.2926 -0.5884
+vn -0.7538 -0.2926 -0.5884
+vn 0.9196 0.1379 -0.3678
+vn -0.9196 0.1379 -0.3678
+vn 0.9297 0.3127 -0.1944
+vn -0.9297 0.3127 -0.1944
+vn 0.9120 0.3376 -0.2329
+vn -0.9120 0.3376 -0.2329
+vn 0.9407 0.3338 -0.0607
+vn -0.9407 0.3338 -0.0607
+vn 0.1761 -0.8805 -0.4402
+vn -0.1761 -0.8805 -0.4402
+vn 0.3708 -0.4733 -0.7991
+vn -0.3708 -0.4733 -0.7991
+vn 0.3107 -0.8284 -0.4660
+vn -0.3107 -0.8284 -0.4660
+vn 0.2793 -0.9515 -0.1287
+vn -0.2793 -0.9515 -0.1287
+vn 0.3139 -0.9321 -0.1807
+vn -0.3139 -0.9321 -0.1807
+vn 0.9762 -0.2083 -0.0609
+vn -0.9762 -0.2083 -0.0609
+vn 0.8267 -0.5066 0.2447
+vn -0.8267 -0.5066 0.2447
+vn 0.3449 -0.1158 -0.9315
+vn -0.3449 -0.1158 -0.9315
+vn 0.1203 0.9644 0.2355
+vn -0.1203 0.9644 0.2355
+vn 0.1275 0.9744 -0.1851
+vn -0.1275 0.9744 -0.1851
+vn 0.3492 0.5947 -0.7241
+vn -0.3492 0.5947 -0.7241
+vn 0.4153 0.8981 -0.1449
+vn -0.4153 0.8981 -0.1449
+vn 0.1845 0.7036 0.6863
+vn -0.1845 0.7036 0.6863
+vn 0.6056 0.7794 0.1608
+vn -0.6056 0.7794 0.1608
+vn 0.7033 0.6806 -0.2053
+vn -0.7033 0.6806 -0.2053
+vn 0.6679 0.2007 -0.7166
+vn -0.6679 0.2007 -0.7166
+vn 0.4948 0.4342 -0.7528
+vn -0.4948 0.4342 -0.7528
+vn 0.6423 0.7459 -0.1761
+vn -0.6423 0.7459 -0.1761
+vn 0.7182 0.6788 0.1530
+vn -0.7182 0.6788 0.1530
+vn 0.7388 0.3972 0.5444
+vn -0.7388 0.3972 0.5444
+vn 0.3428 0.9261 -0.1579
+vn -0.3428 0.9261 -0.1579
+vn 0.2270 0.5740 0.7867
+vn -0.2270 0.5740 0.7867
+vn -0.1722 0.1046 -0.9795
+vn 0.1722 0.1046 -0.9795
+vn 0.0425 0.9150 0.4013
+vn -0.0425 0.9150 0.4013
+vn -0.1616 0.1847 0.9694
+vn 0.1616 0.1847 0.9694
+vn 0.9791 0.1973 0.0483
+vn -0.9791 0.1973 0.0483
+vn 0.9470 0.0918 0.3079
+vn -0.9470 0.0918 0.3079
+vn 0.9794 0.1905 -0.0661
+vn -0.9794 0.1905 -0.0661
+vn 0.9938 0.0312 -0.1070
+vn -0.9938 0.0312 -0.1070
+vn 0.7116 -0.7008 0.0501
+vn -0.7116 -0.7008 0.0501
+vn 0.3722 -0.9243 0.0847
+vn -0.3722 -0.9243 0.0847
+vn 0.4465 -0.8644 0.2310
+vn -0.4465 -0.8644 0.2310
+vn 0.6066 -0.7578 0.2405
+vn -0.6066 -0.7578 0.2405
+vn 0.7325 -0.6368 0.2407
+vn -0.7325 -0.6368 0.2407
+vn 0.2637 -0.4499 0.8533
+vn -0.2637 -0.4499 0.8533
+vn 0.5568 -0.3181 -0.7673
+vn -0.5568 -0.3181 -0.7673
+vn 0.5004 -0.2807 -0.8190
+vn -0.5004 -0.2807 -0.8190
+vn 0.3190 -0.8494 -0.4205
+vn -0.3190 -0.8494 -0.4205
+vn 0.7198 -0.6356 -0.2793
+vn -0.7198 -0.6356 -0.2793
+vn 0.4972 -0.4408 -0.7473
+vn -0.4972 -0.4408 -0.7473
+vn 0.3506 0.3807 0.8557
+vn -0.3506 0.3807 0.8557
+vn 0.4566 0.1715 0.8730
+vn -0.4566 0.1715 0.8730
+vn 0.2583 0.1055 0.9603
+vn -0.2583 0.1055 0.9603
+vn 0.2455 -0.0802 0.9661
+vn -0.2455 -0.0802 0.9661
+vn 0.4643 -0.0599 0.8837
+vn -0.4643 -0.0599 0.8837
+vn 0.6225 -0.3045 0.7210
+vn -0.6225 -0.3045 0.7210
+vn 0.4500 0.6590 0.6027
+vn -0.4500 0.6590 0.6027
+vn -0.2667 0.8309 0.4884
+vn 0.2667 0.8309 0.4884
+vn -0.8284 0.2291 0.5111
+vn 0.8284 0.2291 0.5111
+vn -0.5251 -0.3566 0.7727
+vn 0.5251 -0.3566 0.7727
+vn 0.4546 -0.5665 0.6873
+vn -0.4546 -0.5665 0.6873
+vn 0.6996 -0.4497 0.5552
+vn -0.6996 -0.4497 0.5552
+vn 0.7220 -0.6827 -0.1126
+vn -0.7220 -0.6827 -0.1126
+vn -0.1919 0.2860 0.9388
+vn 0.1919 0.2860 0.9388
+vn 0.9048 -0.3734 -0.2047
+vn -0.9048 -0.3734 -0.2047
+vn 0.1034 0.1551 0.9825
+vn -0.1034 0.1551 0.9825
+vn 0.0841 0.9318 0.3530
+vn -0.0841 0.9318 0.3530
+vn 0.6446 -0.0883 0.7594
+vn -0.6446 -0.0883 0.7594
+vn 0.4309 0.4740 0.7678
+vn -0.4309 0.4740 0.7678
+vn 0.8032 -0.4847 0.3462
+vn -0.8032 -0.4847 0.3462
+vn 0.5811 -0.4128 0.7014
+vn -0.5811 -0.4128 0.7014
+vn 0.5910 -0.4305 0.6822
+vn -0.5910 -0.4305 0.6822
+vn 0.9818 -0.1804 -0.0591
+vn -0.9818 -0.1804 -0.0591
+vn 0.9105 -0.3965 -0.1175
+vn -0.9105 -0.3965 -0.1175
+vn 0.9972 -0.0181 -0.0725
+vn -0.9972 -0.0181 -0.0725
+vn 0.7313 -0.6543 0.1925
+vn -0.7313 -0.6543 0.1925
+vn 0.7867 -0.6079 0.1073
+vn -0.7867 -0.6079 0.1073
+vn 0.7022 -0.7022 0.1170
+vn -0.7022 -0.7022 0.1170
+vn 0.1840 0.9816 -0.0511
+vn -0.1840 0.9816 -0.0511
+vn 0.9352 0.3301 0.1284
+vn -0.9352 0.3301 0.1284
+vn 0.6633 -0.7463 0.0553
+vn -0.6633 -0.7463 0.0553
+vn -0.0085 0.9970 0.0767
+vn 0.0085 0.9970 0.0767
+vn 0.6237 -0.7061 0.3354
+vn -0.6237 -0.7061 0.3354
+vn 0.2733 -0.8925 0.3587
+vn -0.2733 -0.8925 0.3587
+vn -0.8328 -0.5080 -0.2200
+vn 0.8328 -0.5080 -0.2200
+vn -0.8339 0.2377 -0.4981
+vn 0.8339 0.2377 -0.4981
+vn -0.5655 0.7847 -0.2539
+vn 0.5655 0.7847 -0.2539
+vn -0.0560 0.9962 0.0672
+vn 0.0560 0.9962 0.0672
+vn 0.1445 0.0222 0.9893
+vn -0.1445 0.0222 0.9893
+vn 0.3275 0.0645 0.9427
+vn -0.3275 0.0645 0.9427
+vn 0.3127 0.0232 0.9496
+vn -0.3127 0.0232 0.9496
+vn 0.1710 0.0274 0.9849
+vn -0.1710 0.0274 0.9849
+vn 0.3487 0.2849 0.8929
+vn -0.3487 0.2849 0.8929
+vn 0.4006 -0.0343 0.9156
+vn -0.4006 -0.0343 0.9156
+vn 0.2572 -0.0603 0.9645
+vn -0.2572 -0.0603 0.9645
+vn 0.0637 -0.0106 0.9979
+vn -0.0637 -0.0106 0.9979
+vn -0.3637 0.7039 0.6101
+vn 0.3637 0.7039 0.6101
+vn 0.6299 0.0355 0.7759
+vn -0.6299 0.0355 0.7759
+vn 0.4472 -0.2002 0.8717
+vn -0.4472 -0.2002 0.8717
+vn 0.5072 -0.2141 0.8348
+vn -0.5072 -0.2141 0.8348
+vn 0.5258 0.2619 0.8093
+vn -0.5258 0.2619 0.8093
+vn 0.2980 0.5802 0.7580
+vn -0.2980 0.5802 0.7580
+vn 0.0930 -0.9924 -0.0805
+vn -0.0930 -0.9924 -0.0805
+vn 0.5006 -0.8657 0.0080
+vn -0.5006 -0.8657 0.0080
+vn 0.9285 -0.2497 0.2748
+vn -0.9285 -0.2497 0.2748
+vn 0.8393 0.5424 -0.0378
+vn -0.8393 0.5424 -0.0378
+vn -0.2355 0.9367 -0.2589
+vn 0.2355 0.9367 -0.2589
+vn -0.4499 0.8838 -0.1285
+vn 0.4499 0.8838 -0.1285
+vn -0.5384 -0.0098 -0.8427
+vn 0.5384 -0.0098 -0.8427
+vn -0.1910 -0.0241 -0.9813
+vn 0.1910 -0.0241 -0.9813
+vn 0.4046 0.0266 -0.9141
+vn -0.4046 0.0266 -0.9141
+vn -0.7819 0.6231 0.0197
+vn 0.7819 0.6231 0.0197
+vn 0.5428 -0.2063 -0.8142
+vn -0.5428 -0.2063 -0.8142
+vn -0.2474 -0.9231 -0.2945
+vn 0.2474 -0.9231 -0.2945
+usemtl None
+s off
+f 47/1/1 1/2/1 3/3/1 45/4/1
+f 4/5/2 2/6/2 48/7/2 46/8/2
+f 45/4/3 3/3/3 5/9/3 43/10/3
+f 6/11/4 4/5/4 46/8/4 44/12/4
+f 3/3/5 9/13/5 7/14/5 5/9/5
+f 8/15/6 10/16/6 4/5/6 6/11/6
+f 1/2/7 11/17/7 9/13/7 3/3/7
+f 10/16/8 12/18/8 2/6/8 4/5/8
+f 11/17/9 13/19/9 15/20/9 9/13/9
+f 16/21/10 14/22/10 12/18/10 10/16/10
+f 9/13/11 15/20/11 17/23/11 7/14/11
+f 18/24/12 16/21/12 10/16/12 8/15/12
+f 15/20/13 21/25/13 19/26/13 17/23/13
+f 20/27/14 22/28/14 16/21/14 18/24/14
+f 13/19/15 23/29/15 21/25/15 15/20/15
+f 22/28/16 24/30/16 14/22/16 16/21/16
+f 23/29/17 25/31/17 27/32/17 21/25/17
+f 28/33/18 26/34/18 24/30/18 22/28/18
+f 21/25/19 27/32/19 29/35/19 19/26/19
+f 30/36/20 28/33/20 22/28/20 20/27/20
+f 27/32/21 33/37/21 31/38/21 29/35/21
+f 32/39/22 34/40/22 28/33/22 30/36/22
+f 25/31/23 35/41/23 33/37/23 27/32/23
+f 34/40/24 36/42/24 26/34/24 28/33/24
+f 35/41/25 37/43/25 39/44/25 33/37/25
+f 40/45/26 38/46/26 36/42/26 34/40/26
+f 33/37/27 39/44/27 41/47/27 31/38/27
+f 42/48/28 40/45/28 34/40/28 32/39/28
+f 39/44/29 45/4/29 43/10/29 41/47/29
+f 44/12/30 46/8/30 40/45/30 42/48/30
+f 37/43/31 47/1/31 45/4/31 39/44/31
+f 46/8/32 48/7/32 38/46/32 40/45/32
+f 47/1/33 37/43/33 51/49/33 49/50/33
+f 52/51/34 38/46/34 48/7/34 50/52/34
+f 37/43/35 35/41/35 53/53/35 51/49/35
+f 54/54/36 36/42/36 38/46/36 52/51/36
+f 35/41/37 25/31/37 55/55/37 53/53/37
+f 56/56/38 26/34/38 36/42/38 54/54/38
+f 25/31/39 23/29/39 57/57/39 55/55/39
+f 58/58/40 24/30/40 26/34/40 56/56/40
+f 23/29/41 13/19/41 59/59/41 57/57/41
+f 60/60/42 14/22/42 24/30/42 58/58/42
+f 13/19/43 11/17/43 63/61/43 59/59/43
+f 64/62/44 12/18/44 14/22/44 60/60/44
+f 11/17/45 1/2/45 65/63/45 63/61/45
+f 66/64/46 2/6/46 12/18/46 64/62/46
+f 1/2/47 47/1/47 49/50/47 65/63/47
+f 50/52/48 48/7/48 2/6/48 66/64/48
+f 61/65/49 65/63/49 49/50/49
+f 50/52/50 66/64/50 62/66/50
+f 63/61/51 65/63/51 61/65/51
+f 62/66/52 66/64/52 64/62/52
+f 61/65/53 59/59/53 63/61/53
+f 64/62/54 60/60/54 62/66/54
+f 61/65/55 57/57/55 59/59/55
+f 60/60/56 58/58/56 62/66/56
+f 61/65/57 55/55/57 57/57/57
+f 58/58/58 56/56/58 62/66/58
+f 61/65/59 53/53/59 55/55/59
+f 56/56/60 54/54/60 62/66/60
+f 61/65/61 51/49/61 53/53/61
+f 54/54/62 52/51/62 62/66/62
+f 61/65/63 49/50/63 51/49/63
+f 52/51/64 50/52/64 62/66/64
+f 89/67/65 174/68/65 176/69/65 91/70/65
+f 176/69/66 175/71/66 90/72/66 91/70/66
+f 87/73/67 172/74/67 174/68/67 89/67/67
+f 175/71/68 173/75/68 88/76/68 90/72/68
+f 85/77/69 170/78/69 172/74/69 87/73/69
+f 173/75/70 171/79/70 86/80/70 88/76/70
+f 83/81/71 168/82/71 170/78/71 85/77/71
+f 171/79/72 169/83/72 84/84/72 86/80/72
+f 81/85/73 166/86/73 168/82/73 83/81/73
+f 169/83/74 167/87/74 82/88/74 84/84/74
+f 79/89/75 92/90/75 146/91/75 164/92/75
+f 147/93/76 93/94/76 80/95/76 165/96/76
+f 92/90/77 94/97/77 148/98/77 146/91/77
+f 149/99/78 95/100/78 93/94/78 147/93/78
+f 94/97/79 96/101/79 150/102/79 148/98/79
+f 151/103/80 97/104/80 95/100/80 149/99/80
+f 96/101/81 98/105/81 152/106/81 150/102/81
+f 153/107/82 99/108/82 97/104/82 151/103/82
+f 98/105/83 100/109/83 154/110/83 152/106/83
+f 155/111/84 101/112/84 99/108/84 153/107/84
+f 100/109/85 102/113/85 156/114/85 154/110/85
+f 157/115/86 103/116/86 101/112/86 155/111/86
+f 102/113/87 104/117/87 158/118/87 156/114/87
+f 159/119/88 105/120/88 103/116/88 157/115/88
+f 104/117/89 106/121/89 160/122/89 158/118/89
+f 161/123/90 107/124/90 105/120/90 159/119/90
+f 106/121/91 108/125/91 162/126/91 160/122/91
+f 163/127/92 109/128/92 107/124/92 161/123/92
+f 108/125/93 67/129/93 68/130/93 162/126/93
+f 68/130/94 67/129/94 109/128/94 163/127/94
+f 110/131/95 128/132/95 160/122/95 162/126/95
+f 161/123/96 129/133/96 111/134/96 163/127/96
+f 128/132/97 179/135/97 158/118/97 160/122/97
+f 159/119/98 180/136/98 129/133/98 161/123/98
+f 126/137/99 156/114/99 158/118/99 179/135/99
+f 159/119/100 157/115/100 127/138/100 180/136/100
+f 124/139/101 154/110/101 156/114/101 126/137/101
+f 157/115/102 155/111/102 125/140/102 127/138/102
+f 122/141/103 152/106/103 154/110/103 124/139/103
+f 155/111/104 153/107/104 123/142/104 125/140/104
+f 120/143/105 150/102/105 152/106/105 122/141/105
+f 153/107/106 151/103/106 121/144/106 123/142/106
+f 118/145/107 148/98/107 150/102/107 120/143/107
+f 151/103/108 149/99/108 119/146/108 121/144/108
+f 116/147/109 146/91/109 148/98/109 118/145/109
+f 149/99/110 147/93/110 117/148/110 119/146/110
+f 114/149/111 164/92/111 146/91/111 116/147/111
+f 147/93/112 165/96/112 115/150/112 117/148/112
+f 114/149/113 181/151/113 177/152/113 164/92/113
+f 177/152/114 182/153/114 115/150/114 165/96/114
+f 110/131/115 162/126/115 68/130/115 112/154/115
+f 68/130/116 163/127/116 111/134/116 113/155/116
+f 112/154/117 68/130/117 178/156/117 183/157/117
+f 178/156/118 68/130/118 113/155/118 184/158/118
+f 177/152/119 181/151/119 183/157/119 178/156/119
+f 184/158/120 182/153/120 177/152/120 178/156/120
+f 135/159/121 137/160/121 176/69/121 174/68/121
+f 176/69/122 137/160/122 136/161/122 175/71/122
+f 133/162/123 135/159/123 174/68/123 172/74/123
+f 175/71/124 136/161/124 134/163/124 173/75/124
+f 131/164/125 133/162/125 172/74/125 170/78/125
+f 173/75/126 134/163/126 132/165/126 171/79/126
+f 166/86/127 187/166/127 185/167/127 168/82/127
+f 186/168/128 188/169/128 167/87/128 169/83/128
+f 131/164/129 170/78/129 168/82/129 185/167/129
+f 169/83/130 171/79/130 132/165/130 186/168/130
+f 144/170/131 190/171/131 189/172/131 187/166/131
+f 189/172/132 190/171/132 145/173/132 188/169/132
+f 185/167/133 187/166/133 189/172/133 69/174/133
+f 189/172/134 188/169/134 186/168/134 69/174/134
+f 130/175/135 131/164/135 185/167/135 69/174/135
+f 186/168/135 132/165/135 130/175/135 69/174/135
+f 142/176/136 193/177/136 191/178/136 144/170/136
+f 192/179/137 194/180/137 143/181/137 145/173/137
+f 140/182/138 195/183/138 193/177/138 142/176/138
+f 194/180/139 196/184/139 141/185/139 143/181/139
+f 139/186/140 197/187/140 195/183/140 140/182/140
+f 196/184/141 198/188/141 139/186/141 141/185/141
+f 138/189/142 71/190/142 197/187/142 139/186/142
+f 198/188/143 71/190/143 138/189/143 139/186/143
+f 190/171/144 144/170/144 191/178/144 70/191/144
+f 192/179/145 145/173/145 190/171/145 70/191/145
+f 70/191/146 191/178/146 206/192/146 208/193/146
+f 207/194/147 192/179/147 70/191/147 208/193/147
+f 71/190/148 199/195/148 200/196/148 197/187/148
+f 201/197/149 199/195/149 71/190/149 198/188/149
+f 197/187/150 200/196/150 202/198/150 195/183/150
+f 203/199/151 201/197/151 198/188/151 196/184/151
+f 195/183/152 202/198/152 204/200/152 193/177/152
+f 205/201/153 203/199/153 196/184/153 194/180/153
+f 193/177/154 204/200/154 206/192/154 191/178/154
+f 207/194/155 205/201/155 194/180/155 192/179/155
+f 199/195/156 204/200/156 202/198/156 200/196/156
+f 203/199/157 205/201/157 199/195/157 201/197/157
+f 199/195/158 208/193/158 206/192/158 204/200/158
+f 207/194/159 208/193/159 199/195/159 205/201/159
+f 139/186/160 140/182/160 164/92/160 177/152/160
+f 165/96/161 141/185/161 139/186/161 177/152/161
+f 140/182/162 142/176/162 211/202/162 164/92/162
+f 212/203/163 143/181/163 141/185/163 165/96/163
+f 142/176/164 144/170/164 213/204/164 211/202/164
+f 214/205/165 145/173/165 143/181/165 212/203/165
+f 144/170/166 187/166/166 166/86/166 213/204/166
+f 167/87/167 188/169/167 145/173/167 214/205/167
+f 81/85/168 209/206/168 213/204/168 166/86/168
+f 214/205/169 210/207/169 82/88/169 167/87/169
+f 209/206/170 215/208/170 211/202/170 213/204/170
+f 212/203/171 216/209/171 210/207/171 214/205/171
+f 79/89/172 164/92/172 211/202/172 215/208/172
+f 212/203/173 165/96/173 80/95/173 216/209/173
+f 131/164/174 130/175/174 72/210/174 222/211/174
+f 72/210/175 130/175/175 132/165/175 223/212/175
+f 133/162/176 131/164/176 222/211/176 220/213/176
+f 223/212/177 132/165/177 134/163/177 221/214/177
+f 135/159/178 133/162/178 220/213/178 218/215/178
+f 221/214/179 134/163/179 136/161/179 219/216/179
+f 137/160/180 135/159/180 218/215/180 217/217/180
+f 219/216/181 136/161/181 137/160/181 217/217/181
+f 217/217/182 218/215/182 229/218/182 231/219/182
+f 230/220/183 219/216/183 217/217/183 231/219/183
+f 218/215/184 220/213/184 227/221/184 229/218/184
+f 228/222/185 221/214/185 219/216/185 230/220/185
+f 220/213/186 222/211/186 225/223/186 227/221/186
+f 226/224/187 223/212/187 221/214/187 228/222/187
+f 222/211/188 72/210/188 224/225/188 225/223/188
+f 224/225/189 72/210/189 223/212/189 226/224/189
+f 224/225/190 231/219/190 229/218/190 225/223/190
+f 230/220/191 231/219/191 224/225/191 226/224/191
+f 225/223/192 229/218/192 227/221/192
+f 228/222/193 230/220/193 226/224/193
+f 183/157/194 181/151/194 234/226/194 232/227/194
+f 235/228/195 182/153/195 184/158/195 233/229/195
+f 112/154/196 183/157/196 232/227/196 254/230/196
+f 233/229/197 184/158/197 113/155/197 255/231/197
+f 110/131/198 112/154/198 254/230/198 256/232/198
+f 255/231/199 113/155/199 111/134/199 257/233/199
+f 181/151/200 114/149/200 252/234/200 234/226/200
+f 253/235/201 115/150/201 182/153/201 235/228/201
+f 114/149/202 116/147/202 250/236/202 252/234/202
+f 251/237/203 117/148/203 115/150/203 253/235/203
+f 116/147/204 118/145/204 248/238/204 250/236/204
+f 249/239/205 119/146/205 117/148/205 251/237/205
+f 118/145/206 120/143/206 246/240/206 248/238/206
+f 247/241/207 121/144/207 119/146/207 249/239/207
+f 120/143/208 122/141/208 244/242/208 246/240/208
+f 245/243/209 123/142/209 121/144/209 247/241/209
+f 122/141/210 124/139/210 242/244/210 244/242/210
+f 243/245/211 125/140/211 123/142/211 245/243/211
+f 124/139/212 126/137/212 240/246/212 242/244/212
+f 241/247/213 127/138/213 125/140/213 243/245/213
+f 126/137/214 179/135/214 236/248/214 240/246/214
+f 237/249/215 180/136/215 127/138/215 241/247/215
+f 179/135/216 128/132/216 238/250/216 236/248/216
+f 239/251/217 129/133/217 180/136/217 237/249/217
+f 128/132/218 110/131/218 256/232/218 238/250/218
+f 257/233/219 111/134/219 129/133/219 239/251/219
+f 238/250/220 256/232/220 258/252/220 276/253/220
+f 259/254/221 257/233/221 239/251/221 277/255/221
+f 236/248/222 238/250/222 276/253/222 278/256/222
+f 277/255/223 239/251/223 237/249/223 279/257/223
+f 240/246/224 236/248/224 278/256/224 274/258/224
+f 279/257/225 237/249/225 241/247/225 275/259/225
+f 242/244/226 240/246/226 274/258/226 272/260/226
+f 275/259/227 241/247/227 243/245/227 273/261/227
+f 244/242/228 242/244/228 272/260/228 270/262/228
+f 273/261/229 243/245/229 245/243/229 271/263/229
+f 246/240/230 244/242/230 270/262/230 268/264/230
+f 271/263/231 245/243/231 247/241/231 269/265/231
+f 248/238/232 246/240/232 268/264/232 266/266/232
+f 269/265/233 247/241/233 249/239/233 267/267/233
+f 250/236/234 248/238/234 266/266/234 264/268/234
+f 267/267/235 249/239/235 251/237/235 265/269/235
+f 252/234/236 250/236/236 264/268/236 262/270/236
+f 265/269/237 251/237/237 253/235/237 263/271/237
+f 234/226/238 252/234/238 262/270/238 280/272/238
+f 263/271/239 253/235/239 235/228/239 281/273/239
+f 256/232/240 254/230/240 260/274/240 258/252/240
+f 261/275/241 255/231/241 257/233/241 259/254/241
+f 254/230/242 232/227/242 282/276/242 260/274/242
+f 283/277/243 233/229/243 255/231/243 261/275/243
+f 232/227/244 234/226/244 280/272/244 282/276/244
+f 281/273/245 235/228/245 233/229/245 283/277/245
+f 67/129/246 108/125/246 284/278/246 73/279/246
+f 285/280/247 109/128/247 67/129/247 73/279/247
+f 108/125/248 106/121/248 286/281/248 284/278/248
+f 287/282/249 107/124/249 109/128/249 285/280/249
+f 106/121/250 104/117/250 288/283/250 286/281/250
+f 289/284/251 105/120/251 107/124/251 287/282/251
+f 104/117/252 102/113/252 290/285/252 288/283/252
+f 291/286/253 103/116/253 105/120/253 289/284/253
+f 102/113/254 100/109/254 292/287/254 290/285/254
+f 293/288/255 101/112/255 103/116/255 291/286/255
+f 100/109/256 98/105/256 294/289/256 292/287/256
+f 295/290/257 99/108/257 101/112/257 293/288/257
+f 98/105/258 96/101/258 296/291/258 294/289/258
+f 297/292/259 97/104/259 99/108/259 295/290/259
+f 96/101/260 94/97/260 298/293/260 296/291/260
+f 299/294/261 95/100/261 97/104/261 297/292/261
+f 94/97/262 92/90/262 300/295/262 298/293/262
+f 301/296/263 93/94/263 95/100/263 299/294/263
+f 308/297/264 309/298/264 328/299/264 338/300/264
+f 329/301/265 309/302/265 308/303/265 339/304/265
+f 307/305/266 308/297/266 338/300/266 336/306/266
+f 339/304/267 308/303/267 307/307/267 337/308/267
+f 306/309/268 307/305/268 336/306/268 340/310/268
+f 337/308/269 307/307/269 306/309/269 341/311/269
+f 89/67/270 91/70/270 306/309/270 340/310/270
+f 306/309/271 91/70/271 90/72/271 341/311/271
+f 87/73/272 89/67/272 340/310/272 334/312/272
+f 341/311/273 90/72/273 88/76/273 335/313/273
+f 85/77/274 87/73/274 334/312/274 330/314/274
+f 335/313/275 88/76/275 86/80/275 331/315/275
+f 83/81/276 85/77/276 330/314/276 332/316/276
+f 331/315/277 86/80/277 84/84/277 333/317/277
+f 330/314/278 336/306/278 338/300/278 332/316/278
+f 339/304/279 337/308/279 331/315/279 333/317/279
+f 330/314/280 334/312/280 340/310/280 336/306/280
+f 341/311/281 335/313/281 331/315/281 337/308/281
+f 326/318/282 332/316/282 338/300/282 328/299/282
+f 339/304/283 333/317/283 327/319/283 329/301/283
+f 81/85/284 83/81/284 332/316/284 326/318/284
+f 333/317/285 84/84/285 82/88/285 327/319/285
+f 209/206/286 342/320/286 344/321/286 215/208/286
+f 345/322/287 343/323/287 210/207/287 216/209/287
+f 81/85/288 326/318/288 342/320/288 209/206/288
+f 343/323/289 327/319/289 82/88/289 210/207/289
+f 79/89/290 215/208/290 344/321/290 346/324/290
+f 345/322/291 216/209/291 80/95/291 347/325/291
+f 79/89/292 346/324/292 300/295/292 92/90/292
+f 301/296/293 347/325/293 80/95/293 93/94/293
+f 77/326/294 324/327/294 352/328/294 304/329/294
+f 353/330/295 325/331/295 77/332/295 304/333/295
+f 304/329/296 352/328/296 350/334/296 78/335/296
+f 351/336/297 353/330/297 304/333/297 78/337/297
+f 78/335/298 350/334/298 348/338/298 305/339/298
+f 349/340/299 351/336/299 78/337/299 305/341/299
+f 305/339/300 348/338/300 328/299/300 309/298/300
+f 329/301/301 349/340/301 305/341/301 309/302/301
+f 326/318/302 328/299/302 348/338/302 342/320/302
+f 349/340/303 329/301/303 327/319/303 343/323/303
+f 296/291/304 298/293/304 318/342/304 310/343/304
+f 319/344/305 299/294/305 297/292/305 311/345/305
+f 76/346/306 316/347/306 324/327/306 77/326/306
+f 325/331/307 317/348/307 76/349/307 77/332/307
+f 302/350/308 358/351/308 356/352/308 303/353/308
+f 357/354/309 359/355/309 302/356/309 303/357/309
+f 303/353/310 356/352/310 354/358/310 75/359/310
+f 355/360/311 357/354/311 303/357/311 75/361/311
+f 75/359/312 354/358/312 316/347/312 76/346/312
+f 317/348/313 355/360/313 75/361/313 76/349/313
+f 292/362/314 294/289/314 362/363/314 364/364/314
+f 363/365/315 295/290/315 293/366/315 365/367/315
+f 364/364/316 362/363/316 368/368/316 366/369/316
+f 369/370/317 363/365/317 365/367/317 367/371/317
+f 366/369/318 368/368/318 370/372/318 372/373/318
+f 371/374/319 369/370/319 367/371/319 373/375/319
+f 372/373/320 370/372/320 376/376/320 374/377/320
+f 377/378/321 371/374/321 373/375/321 375/379/321
+f 314/380/322 378/381/322 374/377/322 376/376/322
+f 375/379/323 379/382/323 315/383/323 377/378/323
+f 316/347/324 354/358/324 374/377/324 378/381/324
+f 375/379/325 355/360/325 317/348/325 379/382/325
+f 354/358/326 356/352/326 372/373/326 374/377/326
+f 373/375/327 357/354/327 355/360/327 375/379/327
+f 356/352/328 358/351/328 366/369/328 372/373/328
+f 367/371/329 359/355/329 357/354/329 373/375/329
+f 358/351/330 360/384/330 364/364/330 366/369/330
+f 365/367/331 361/385/331 359/355/331 367/371/331
+f 290/386/332 292/362/332 364/364/332 360/384/332
+f 365/367/333 293/366/333 291/387/333 361/385/333
+f 74/388/334 360/384/334 358/351/334 302/350/334
+f 359/355/335 361/385/335 74/389/335 302/356/335
+f 284/390/336 286/391/336 288/392/336 290/386/336
+f 289/393/337 287/394/337 285/395/337 291/387/337
+f 284/390/338 290/386/338 360/384/338 74/388/338
+f 361/385/339 291/387/339 285/395/339 74/389/339
+f 73/396/340 284/390/340 74/388/340
+f 74/389/341 285/395/341 73/397/341
+f 294/289/342 296/291/342 310/343/342 362/363/342
+f 311/345/343 297/292/343 295/290/343 363/365/343
+f 310/343/344 312/398/344 368/368/344 362/363/344
+f 369/370/345 313/399/345 311/345/345 363/365/345
+f 312/398/346 382/400/346 370/372/346 368/368/346
+f 371/374/347 383/401/347 313/399/347 369/370/347
+f 314/380/348 376/376/348 370/372/348 382/400/348
+f 371/374/349 377/378/349 315/383/349 383/401/349
+f 348/338/350 350/334/350 386/402/350 384/403/350
+f 387/404/351 351/336/351 349/340/351 385/405/351
+f 318/342/352 384/403/352 386/402/352 320/406/352
+f 387/404/353 385/405/353 319/344/353 321/407/353
+f 298/293/354 300/295/354 384/403/354 318/342/354
+f 385/405/355 301/296/355 299/294/355 319/344/355
+f 300/295/356 344/321/356 342/320/356 384/403/356
+f 343/323/357 345/322/357 301/296/357 385/405/357
+f 342/320/358 348/338/358 384/403/358
+f 385/405/359 349/340/359 343/323/359
+f 300/295/360 346/324/360 344/321/360
+f 345/322/361 347/325/361 301/296/361
+f 314/380/362 322/408/362 380/409/362 378/381/362
+f 381/410/363 323/411/363 315/383/363 379/382/363
+f 316/347/364 378/381/364 380/409/364 324/327/364
+f 381/410/365 379/382/365 317/348/365 325/331/365
+f 320/406/366 386/402/366 380/409/366 322/408/366
+f 381/410/367 387/404/367 321/407/367 323/411/367
+f 350/334/368 352/328/368 380/409/368 386/402/368
+f 381/410/369 353/330/369 351/336/369 387/404/369
+f 324/327/370 380/409/370 352/328/370
+f 353/330/371 381/410/371 325/331/371
+f 400/412/372 388/413/372 414/414/372 402/415/372
+f 415/416/373 389/417/373 401/418/373 403/419/373
+f 400/412/374 402/415/374 404/420/374 398/421/374
+f 405/422/375 403/419/375 401/418/375 399/423/375
+f 398/421/376 404/420/376 406/424/376 396/425/376
+f 407/426/377 405/422/377 399/423/377 397/427/377
+f 396/425/378 406/424/378 408/428/378 394/429/378
+f 409/430/379 407/426/379 397/427/379 395/431/379
+f 394/429/380 408/428/380 410/432/380 392/433/380
+f 411/434/381 409/430/381 395/431/381 393/435/381
+f 392/433/382 410/432/382 412/436/382 390/437/382
+f 413/438/383 411/434/383 393/435/383 391/439/383
+f 410/432/384 420/440/384 418/441/384 412/436/384
+f 419/442/385 421/443/385 411/434/385 413/438/385
+f 408/428/386 422/444/386 420/440/386 410/432/386
+f 421/443/387 423/445/387 409/430/387 411/434/387
+f 406/424/388 424/446/388 422/444/388 408/428/388
+f 423/445/389 425/447/389 407/426/389 409/430/389
+f 404/420/390 426/448/390 424/446/390 406/424/390
+f 425/447/391 427/449/391 405/422/391 407/426/391
+f 402/415/392 428/450/392 426/448/392 404/420/392
+f 427/449/393 429/451/393 403/419/393 405/422/393
+f 402/415/394 414/414/394 416/452/394 428/450/394
+f 417/453/395 415/416/395 403/419/395 429/451/395
+f 318/342/396 320/406/396 444/454/396 442/455/396
+f 445/456/397 321/407/397 319/344/397 443/457/397
+f 320/458/398 390/437/398 412/436/398 444/459/398
+f 413/438/399 391/439/399 321/460/399 445/461/399
+f 310/343/400 318/342/400 442/455/400 312/398/400
+f 443/457/401 319/344/401 311/345/401 313/399/401
+f 382/462/402 430/463/402 414/414/402 388/413/402
+f 415/416/403 431/464/403 383/465/403 389/417/403
+f 412/436/404 418/441/404 440/466/404 444/459/404
+f 441/467/405 419/442/405 413/438/405 445/461/405
+f 438/468/406 446/469/406 444/459/406 440/466/406
+f 445/461/407 447/470/407 439/471/407 441/467/407
+f 434/472/408 446/469/408 438/468/408 436/473/408
+f 439/471/409 447/470/409 435/474/409 437/475/409
+f 432/476/410 448/477/410 446/469/410 434/472/410
+f 447/470/411 449/478/411 433/479/411 435/474/411
+f 430/463/412 448/477/412 432/476/412 450/480/412
+f 433/479/413 449/478/413 431/464/413 451/481/413
+f 414/414/414 430/463/414 450/480/414 416/452/414
+f 451/481/415 431/464/415 415/416/415 417/453/415
+f 312/398/416 448/482/416 430/483/416 382/400/416
+f 431/484/417 449/485/417 313/399/417 383/401/417
+f 312/398/418 442/455/418 446/486/418 448/482/418
+f 447/487/419 443/457/419 313/399/419 449/485/419
+f 442/455/420 444/454/420 446/486/420
+f 447/487/421 445/456/421 443/457/421
+f 416/452/422 450/480/422 452/488/422 476/489/422
+f 453/490/423 451/481/423 417/453/423 477/491/423
+f 450/480/424 432/476/424 462/492/424 452/488/424
+f 463/493/425 433/479/425 451/481/425 453/490/425
+f 432/476/426 434/472/426 460/494/426 462/492/426
+f 461/495/427 435/474/427 433/479/427 463/493/427
+f 434/472/428 436/473/428 458/496/428 460/494/428
+f 459/497/429 437/475/429 435/474/429 461/495/429
+f 436/473/430 438/468/430 456/498/430 458/496/430
+f 457/499/431 439/471/431 437/475/431 459/497/431
+f 438/468/432 440/466/432 454/500/432 456/498/432
+f 455/501/433 441/467/433 439/471/433 457/499/433
+f 440/466/434 418/441/434 474/502/434 454/500/434
+f 475/503/435 419/442/435 441/467/435 455/501/435
+f 428/450/436 416/452/436 476/489/436 464/504/436
+f 477/491/437 417/453/437 429/451/437 465/505/437
+f 426/448/438 428/450/438 464/504/438 466/506/438
+f 465/505/439 429/451/439 427/449/439 467/507/439
+f 424/446/440 426/448/440 466/506/440 468/508/440
+f 467/507/441 427/449/441 425/447/441 469/509/441
+f 422/444/442 424/446/442 468/508/442 470/510/442
+f 469/509/443 425/447/443 423/445/443 471/511/443
+f 420/440/444 422/444/444 470/510/444 472/512/444
+f 471/511/445 423/445/445 421/443/445 473/513/445
+f 418/441/446 420/440/446 472/512/446 474/502/446
+f 473/513/447 421/443/447 419/442/447 475/503/447
+f 458/496/448 456/498/448 480/514/448 478/515/448
+f 481/516/449 457/499/449 459/497/449 479/517/449
+f 478/515/450 480/514/450 482/518/450 484/519/450
+f 483/520/451 481/516/451 479/517/451 485/521/451
+f 484/519/452 482/518/452 488/522/452 486/523/452
+f 489/524/453 483/520/453 485/521/453 487/525/453
+f 486/523/454 488/522/454 490/526/454 492/527/454
+f 491/528/455 489/524/455 487/525/455 493/529/455
+f 464/504/456 476/489/456 486/523/456 492/527/456
+f 487/525/457 477/491/457 465/505/457 493/529/457
+f 452/488/458 484/519/458 486/523/458 476/489/458
+f 487/525/459 485/521/459 453/490/459 477/491/459
+f 452/488/460 462/492/460 478/515/460 484/519/460
+f 479/517/461 463/493/461 453/490/461 485/521/461
+f 458/496/462 478/515/462 462/492/462 460/494/462
+f 463/493/463 479/517/463 459/497/463 461/495/463
+f 454/500/464 474/502/464 480/514/464 456/498/464
+f 481/516/465 475/503/465 455/501/465 457/499/465
+f 472/512/466 482/518/466 480/514/466 474/502/466
+f 481/516/467 483/520/467 473/513/467 475/503/467
+f 470/510/468 488/522/468 482/518/468 472/512/468
+f 483/520/469 489/524/469 471/511/469 473/513/469
+f 468/508/470 490/526/470 488/522/470 470/510/470
+f 489/524/471 491/528/471 469/509/471 471/511/471
+f 466/506/472 492/527/472 490/526/472 468/508/472
+f 491/528/473 493/529/473 467/507/473 469/509/473
+f 464/504/474 492/527/474 466/506/474
+f 467/507/475 493/529/475 465/505/475
+f 392/433/476 390/437/476 504/530/476 502/531/476
+f 505/532/477 391/439/477 393/435/477 503/533/477
+f 394/429/478 392/433/478 502/531/478 500/534/478
+f 503/533/479 393/435/479 395/431/479 501/535/479
+f 396/425/480 394/429/480 500/534/480 498/536/480
+f 501/535/481 395/431/481 397/427/481 499/537/481
+f 398/538/482 396/425/482 498/536/482 496/539/482
+f 499/537/483 397/427/483 399/540/483 497/541/483
+f 400/542/484 398/538/484 496/539/484 494/543/484
+f 497/541/485 399/540/485 401/544/485 495/545/485
+f 388/546/486 400/542/486 494/543/486 506/547/486
+f 495/545/487 401/544/487 389/548/487 507/549/487
+f 494/543/488 502/531/488 504/530/488 506/547/488
+f 505/532/489 503/533/489 495/545/489 507/549/489
+f 494/543/490 496/539/490 500/534/490 502/531/490
+f 501/535/491 497/541/491 495/545/491 503/533/491
+f 496/539/492 498/536/492 500/534/492
+f 501/535/493 499/537/493 497/541/493
+f 314/380/494 382/400/494 388/550/494 506/551/494
+f 389/548/495 383/552/495 315/553/495 507/549/495
+f 314/554/496 506/547/496 504/530/496 322/555/496
+f 505/532/497 507/549/497 315/553/497 323/556/497
+f 320/458/498 322/555/498 504/530/498 390/437/498
+f 505/532/499 323/556/499 321/460/499 391/439/499
diff --git a/aswebglue/examples/robot.blend b/aswebglue/examples/robot.blend
new file mode 100644
index 0000000..d2b6f5d
Binary files /dev/null and b/aswebglue/examples/robot.blend differ
diff --git a/aswebglue/examples/robot.blend1 b/aswebglue/examples/robot.blend1
new file mode 100644
index 0000000..7ce20f6
Binary files /dev/null and b/aswebglue/examples/robot.blend1 differ
diff --git a/aswebglue/examples/robot.mtl b/aswebglue/examples/robot.mtl
new file mode 100644
index 0000000..8d5322e
--- /dev/null
+++ b/aswebglue/examples/robot.mtl
@@ -0,0 +1,59 @@
+# Blender MTL File: 'robot.blend'
+# Material Count: 3
+
+newmtl Material
+# Ns Specular Exponent
+Ns 323.999994
+# Ka Ambient Reflectivity
+Ka 1.000000 1.000000 1.000000
+# Kd Diffuse Reflectivity
+Kd 0.800000 0.314507 0.070683
+# Ks Specular Reflectivity
+Ks 0.500000 0.500000 0.500000
+# Ke Emission
+Ke 0.000000 0.000000 0.000000
+# Ni Optical Density
+Ni 1.450000
+# d dissolve factor
+d 1.000000
+# illum illumination model
+# Illumination Properties that are turned on in the
+# model Property Editor
+# 0 Color on and Ambient off
+# 1 Color on and Ambient on
+# 2 Highlight on
+# 3 Reflection on and Ray trace on
+# 4 Transparency: Glass on
+# Reflection: Ray trace on
+# 5 Reflection: Fresnel on and Ray trace on
+# 6 Transparency: Refraction on
+# Reflection: Fresnel off and Ray trace on
+# 7 Transparency: Refraction on
+# Reflection: Fresnel on and Ray trace on
+# 8 Reflection on and Ray trace off
+# 9 Transparency: Glass on
+# Reflection: Ray trace off
+# 10 Casts shadows onto invisible surfaces
+
+illum 2
+
+
+newmtl Material.001
+Ns 225.000000
+Ka 1.000000 1.000000 1.000000
+Kd 1.000000 0.000000 0.000000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
+
+newmtl Material.002
+Ns 225.000000
+Ka 1.000000 1.000000 1.000000
+Kd 0.000000 0.000000 1.000000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
diff --git a/aswebglue/examples/robot.obj b/aswebglue/examples/robot.obj
new file mode 100644
index 0000000..db380da
--- /dev/null
+++ b/aswebglue/examples/robot.obj
@@ -0,0 +1,377 @@
+# Blender v2.90.1 OBJ File: 'robot.blend'
+# www.blender.org
+mtllib robot.mtl
+o Cube
+v 1.000000 1.000000 -1.000000
+v 1.000000 -1.000000 -1.000000
+v 1.000000 1.000000 1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+v -1.000000 -1.000000 -1.000000
+v -1.000000 1.000000 1.000000
+v -1.000000 -1.000000 1.000000
+v 0.396396 3.195775 0.396396
+v -0.396396 3.195775 0.396396
+v 0.396396 3.195775 -0.396396
+v -0.396396 3.195775 -0.396396
+v 0.707780 4.659433 0.707780
+v -0.707780 4.659433 0.707780
+v 0.707780 4.659433 -0.707780
+v -0.707780 4.659433 -0.707780
+v 0.707780 5.747853 0.707780
+v -0.707780 5.747853 0.707780
+v 0.707780 5.747853 -0.707780
+v -0.707780 5.747853 -0.707780
+v 0.363607 6.039236 0.363607
+v -0.363607 6.039236 0.363607
+v 0.363607 6.039236 -0.363607
+v -0.363607 6.039236 -0.363607
+v 0.363607 6.228965 0.363607
+v -0.363607 6.228965 0.363607
+v 0.363607 6.228965 -0.363607
+v -0.363607 6.228965 -0.363607
+v 0.527745 6.437937 0.527745
+v -0.527745 6.437937 0.527745
+v 0.527745 6.437937 -0.527745
+v -0.527745 6.437937 -0.527745
+v 0.581972 7.220059 0.581972
+v -0.581972 7.220059 0.581972
+v 0.581972 7.220059 -0.581972
+v -0.581972 7.220059 -0.581972
+v 0.285750 7.649150 0.285750
+v -0.285750 7.649150 0.285750
+v 0.285750 7.649150 -0.285750
+v -0.285750 7.649150 -0.285750
+v 0.980918 4.891058 -0.406536
+v 0.980918 4.891058 0.406536
+v 0.980918 5.516228 -0.406536
+v 0.980918 5.516228 0.406536
+v -0.980918 4.891058 0.406536
+v -0.980918 4.891058 -0.406536
+v -0.980918 5.516228 0.406536
+v -0.980918 5.516228 -0.406536
+v -1.280918 4.891058 0.406536
+v -1.280918 4.891058 -0.406536
+v -1.280918 5.516228 0.406536
+v -1.280918 5.516228 -0.406536
+v 1.280918 4.891058 -0.406536
+v 1.280918 4.891058 0.406536
+v 1.280918 5.516228 -0.406536
+v 1.280918 5.516228 0.406536
+v 1.039887 4.005651 -0.246717
+v 1.039887 4.005651 0.246717
+v -1.039887 4.005651 0.246717
+v -1.039887 4.005651 -0.246717
+v -1.221950 4.005651 0.246717
+v -1.221950 4.005651 -0.246717
+v 1.221950 4.005651 -0.246717
+v 1.221950 4.005651 0.246717
+v 0.980918 3.537906 -0.406536
+v 0.980918 3.356243 0.406536
+v -0.980918 3.356243 0.406536
+v -0.980918 3.537906 -0.406536
+v -1.280918 3.356243 0.406536
+v -1.280918 3.537906 -0.406536
+v 1.280918 3.537906 -0.406536
+v 1.280918 3.356243 0.406536
+v 0.980918 2.342852 -0.795716
+v 0.980918 2.342852 -0.481741
+v -0.980918 2.342852 -0.481741
+v -0.980918 2.342852 -0.795716
+v -1.280918 2.342852 -0.481741
+v -1.280918 2.342852 -0.795716
+v 1.280918 2.342852 -0.795716
+v 1.280918 2.342852 -0.481741
+v 0.980918 2.075831 -1.046264
+v 0.980918 1.921174 -0.773021
+v -0.980918 1.921174 -0.773021
+v -0.980918 2.075831 -1.046264
+v -1.280918 1.921174 -0.773021
+v -1.280918 2.075831 -1.046264
+v 1.280918 2.075831 -1.046264
+v 1.280918 1.921174 -0.773021
+v 1.055918 1.868141 -1.073623
+v 1.055918 1.790813 -0.937002
+v -1.055918 1.790813 -0.937002
+v -1.055918 1.868141 -1.073623
+v -1.205918 1.790813 -0.937002
+v -1.205918 1.868141 -1.073623
+v 1.205918 1.868141 -1.073623
+v 1.205918 1.790813 -0.937002
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.375000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.375000 1.000000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.375000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.500000
+vt 0.125000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.000000
+vt 0.625000 0.750000
+vt 0.625000 0.000000
+vt 0.625000 1.000000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.875000 0.500000
+vt 0.875000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 1.000000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.000000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 0.250000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 1.000000
+vn 0.0000 0.2651 -0.9642
+vn 0.0000 0.0000 1.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 0.2651 0.9642
+vn -0.9642 0.2651 0.0000
+vn 0.9642 0.2651 0.0000
+vn -0.6461 0.7632 0.0000
+vn 0.7408 0.0000 0.6717
+vn -0.7408 0.0000 -0.6717
+vn 0.0000 0.7632 0.6461
+vn 0.0000 0.7632 -0.6461
+vn 0.6461 0.7632 0.0000
+vn 0.0000 -0.6177 -0.7864
+vn 0.7864 -0.6177 0.0000
+vn -0.7864 -0.6177 0.0000
+vn 0.0000 -0.6177 0.7864
+vn 0.0000 0.5681 -0.8229
+vn 0.0000 -0.0692 0.9976
+vn 0.0000 1.0000 0.0000
+vn 0.8229 0.5681 0.0000
+vn -0.8229 0.5681 0.0000
+vn 0.0000 0.5681 0.8229
+vn 0.6468 -0.7627 0.0000
+vn 0.7408 0.0000 -0.6717
+vn 0.6468 0.7627 0.0000
+vn -0.6468 0.7627 0.0000
+vn -0.7408 0.0000 0.6717
+vn -0.6468 -0.7627 0.0000
+vn -0.9978 -0.0665 0.0000
+vn 0.9978 -0.0665 0.0000
+vn 0.0000 0.2390 0.9710
+vn 0.9944 0.1050 0.0146
+vn 0.0000 -0.1776 -0.9841
+vn 0.0000 -0.1776 0.9841
+vn 0.0000 -0.6592 0.7520
+vn 0.0000 0.3233 -0.9463
+vn -0.9944 0.1050 0.0146
+vn 0.0000 0.6843 -0.7292
+vn 0.0000 0.3097 -0.9508
+vn 0.0000 0.1306 -0.9914
+vn 0.9329 -0.3135 -0.1774
+vn 0.0000 -0.5684 0.8228
+vn 0.0000 -0.8703 -0.4926
+vn -0.9329 -0.3135 -0.1774
+vn 0.0000 -0.7828 0.6223
+vn -0.9976 -0.0692 0.0000
+vn 0.0000 -0.0692 -0.9976
+vn 0.9976 -0.0692 0.0000
+vn -0.9781 -0.2081 0.0000
+vn 0.0000 -0.2081 0.9781
+vn 0.0000 -0.2081 -0.9781
+vn 0.9781 -0.2081 0.0000
+usemtl Material
+s off
+f 1/1/1 5/2/1 12/3/1 11/4/1
+f 4/5/2 3/6/2 7/7/2 8/8/2
+f 8/9/3 7/10/3 5/2/3 6/11/3
+f 6/12/4 2/13/4 4/5/4 8/14/4
+f 2/13/5 1/1/5 3/6/5 4/5/5
+f 6/11/6 5/2/6 1/1/6 2/13/6
+f 7/7/7 3/6/7 9/15/7 10/16/7
+f 5/2/8 7/10/8 10/17/8 12/3/8
+f 3/6/9 1/1/9 11/4/9 9/15/9
+f 15/18/6 16/19/6 20/20/6 19/21/6
+f 20/20/10 18/22/10 22/23/10 24/24/10
+f 17/25/11 13/26/11 42/27/11 44/28/11
+f 20/20/12 16/19/12 46/29/12 48/30/12
+f 14/31/2 13/26/2 17/25/2 18/32/2
+f 22/33/2 21/34/2 25/35/2 26/36/2
+f 18/32/13 17/25/13 21/34/13 22/33/13
+f 19/21/14 20/20/14 24/24/14 23/37/14
+f 17/25/15 19/21/15 23/37/15 21/34/15
+f 27/38/16 28/39/16 32/40/16 31/41/16
+f 23/37/6 24/24/6 28/39/6 27/38/6
+f 21/34/5 23/37/5 27/38/5 25/35/5
+f 24/24/3 22/23/3 26/42/3 28/39/3
+f 25/35/17 27/38/17 31/41/17 29/43/17
+f 28/39/18 26/42/18 30/44/18 32/40/18
+f 26/36/19 25/35/19 29/43/19 30/45/19
+f 35/46/20 36/47/20 40/48/20 39/49/20
+f 30/45/21 29/43/21 33/50/21 34/51/21
+f 39/49/22 40/52/22 38/53/22 37/54/22
+f 33/50/23 35/46/23 39/49/23 37/54/23
+f 36/47/24 34/55/24 38/56/24 40/48/24
+f 34/51/25 33/50/25 37/54/25 38/57/25
+f 41/58/6 43/59/6 55/60/6 53/61/6
+f 13/26/26 15/18/26 41/58/26 42/27/26
+f 15/18/27 19/21/27 43/59/27 41/58/27
+f 19/21/28 17/25/28 44/28/28 43/59/28
+f 45/62/2 47/63/2 51/64/2 49/65/2
+f 18/22/29 20/20/29 48/30/29 47/66/29
+f 14/31/30 18/32/30 47/63/30 45/62/30
+f 16/19/31 14/67/31 45/68/31 46/29/31
+f 50/69/3 49/70/3 51/71/3 52/72/3
+f 47/66/22 48/30/22 52/72/22 51/71/22
+f 48/30/6 46/29/6 50/69/6 52/72/6
+f 42/27/32 41/58/32 57/73/32 58/74/32
+f 54/75/5 53/61/5 55/60/5 56/76/5
+f 53/61/33 54/75/33 64/77/33 63/78/33
+f 44/28/2 42/27/2 54/75/2 56/76/2
+f 43/59/22 44/28/22 56/76/22 55/60/22
+f 59/79/34 61/80/34 69/81/34 67/82/34
+f 63/78/35 64/77/35 72/83/35 71/84/35
+f 41/58/36 53/61/36 63/78/36 57/73/36
+f 49/70/32 50/69/32 62/85/32 61/86/32
+f 50/69/36 46/29/36 60/87/36 62/85/36
+f 45/62/37 49/65/37 61/80/37 59/79/37
+f 54/75/37 42/27/37 58/74/37 64/77/37
+f 46/29/33 45/68/33 59/88/33 60/87/33
+f 72/83/38 66/89/38 74/90/38 80/91/38
+f 66/89/3 65/92/3 73/93/3 74/90/3
+f 60/87/35 59/88/35 67/94/35 68/95/35
+f 57/73/39 63/78/39 71/84/39 65/92/39
+f 62/85/39 60/87/39 68/95/39 70/96/39
+f 61/86/40 62/85/40 70/96/40 69/97/40
+f 58/74/40 57/73/40 65/92/40 66/89/40
+f 64/77/34 58/74/34 66/89/34 72/83/34
+f 78/98/41 76/99/41 84/100/41 86/101/41
+f 73/93/41 79/102/41 87/103/41 81/104/41
+f 71/84/5 72/83/5 80/91/5 79/102/5
+f 67/82/38 69/81/38 77/105/38 75/106/38
+f 68/95/5 67/94/5 75/107/5 76/99/5
+f 65/92/42 71/84/42 79/102/42 73/93/42
+f 70/96/42 68/95/42 76/99/42 78/98/42
+f 69/97/3 70/96/3 78/98/3 77/108/3
+f 81/104/43 87/103/43 95/109/43 89/110/43
+f 84/100/44 83/111/44 91/112/44 92/113/44
+f 77/108/3 78/98/3 86/101/3 85/114/3
+f 74/90/3 73/93/3 81/104/3 82/115/3
+f 80/91/45 74/90/45 82/115/45 88/116/45
+f 79/102/5 80/91/5 88/116/5 87/103/5
+f 75/106/45 77/105/45 85/117/45 83/118/45
+f 76/99/5 75/107/5 83/111/5 84/100/5
+f 92/113/46 91/112/46 93/119/46 94/120/46
+f 90/121/46 89/110/46 95/109/46 96/122/46
+f 86/101/43 84/100/43 92/113/43 94/120/43
+f 85/114/47 86/101/47 94/120/47 93/119/47
+f 82/115/47 81/104/47 89/110/47 90/121/47
+f 88/116/48 82/115/48 90/121/48 96/122/48
+f 87/103/44 88/116/44 96/122/44 95/109/44
+f 83/118/48 85/117/48 93/123/48 91/124/48
+usemtl Material.001
+f 32/40/49 30/44/49 34/55/49 36/47/49
+f 31/41/50 32/40/50 36/47/50 35/46/50
+f 29/43/51 31/41/51 35/46/51 33/50/51
+usemtl Material.002
+f 12/3/52 10/17/52 14/67/52 16/19/52
+f 10/16/53 9/15/53 13/26/53 14/31/53
+f 11/4/54 12/3/54 16/19/54 15/18/54
+f 9/15/55 11/4/55 15/18/55 13/26/55
diff --git a/aswebglue/examples/robot_texture.blend b/aswebglue/examples/robot_texture.blend
new file mode 100644
index 0000000..c2d409e
Binary files /dev/null and b/aswebglue/examples/robot_texture.blend differ
diff --git a/aswebglue/examples/robot_texture.blend1 b/aswebglue/examples/robot_texture.blend1
new file mode 100644
index 0000000..8c4d685
Binary files /dev/null and b/aswebglue/examples/robot_texture.blend1 differ
diff --git a/aswebglue/examples/robot_texture.mtl b/aswebglue/examples/robot_texture.mtl
new file mode 100644
index 0000000..f0de6f6
--- /dev/null
+++ b/aswebglue/examples/robot_texture.mtl
@@ -0,0 +1,14 @@
+# Blender MTL File: 'robot_texture.blend'
+# Material Count: 1
+
+newmtl Material.003
+Ns 900.000000
+Ka 1.000000 1.000000 1.000000
+Kd 0.800000 0.800000 0.800000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
+map_Bump RobotTexPixel_n.png
+map_Kd RobotTexPixel.png
diff --git a/aswebglue/examples/robot_texture.obj b/aswebglue/examples/robot_texture.obj
new file mode 100644
index 0000000..1253f0d
--- /dev/null
+++ b/aswebglue/examples/robot_texture.obj
@@ -0,0 +1,528 @@
+# Blender v2.90.1 OBJ File: 'robot_texture.blend'
+# www.blender.org
+mtllib robot_texture.mtl
+o RobotTex_Mesh
+v 0.100000 0.100000 -0.100000
+v 0.100000 -0.100000 -0.100000
+v 0.100000 0.100000 0.100000
+v 0.100000 -0.100000 0.100000
+v -0.100000 0.100000 -0.100000
+v -0.100000 -0.100000 -0.100000
+v -0.100000 0.100000 0.100000
+v -0.100000 -0.100000 0.100000
+v 0.039640 0.319577 0.039640
+v -0.039640 0.319577 0.039640
+v 0.039640 0.319577 -0.039640
+v -0.039640 0.319577 -0.039640
+v 0.070778 0.465943 0.070778
+v -0.070778 0.465943 0.070778
+v 0.070778 0.465943 -0.070778
+v -0.070778 0.465943 -0.070778
+v 0.070778 0.574785 0.070778
+v -0.070778 0.574785 0.070778
+v 0.070778 0.574785 -0.070778
+v -0.070778 0.574785 -0.070778
+v 0.036361 0.603924 0.036361
+v -0.036361 0.603924 0.036361
+v 0.036361 0.603924 -0.036361
+v -0.036361 0.603924 -0.036361
+v 0.036361 0.622896 0.036361
+v -0.036361 0.622896 0.036361
+v 0.036361 0.622896 -0.036361
+v -0.036361 0.622896 -0.036361
+v 0.052774 0.643794 0.052774
+v -0.052774 0.643794 0.052774
+v 0.052774 0.643794 -0.052774
+v -0.052774 0.643794 -0.052774
+v 0.058197 0.722006 0.058197
+v -0.058197 0.722006 0.058197
+v 0.058197 0.722006 -0.058197
+v -0.058197 0.722006 -0.058197
+v 0.028575 0.764915 0.028575
+v -0.028575 0.764915 0.028575
+v 0.028575 0.764915 -0.028575
+v -0.028575 0.764915 -0.028575
+v 0.098092 0.489106 -0.040654
+v 0.098092 0.489106 0.040654
+v 0.098092 0.551623 -0.040654
+v 0.098092 0.551623 0.040654
+v -0.098092 0.489106 0.040654
+v -0.098092 0.489106 -0.040654
+v -0.098092 0.551623 0.040654
+v -0.098092 0.551623 -0.040654
+v -0.128092 0.489106 0.040654
+v -0.128092 0.489106 -0.040654
+v -0.128092 0.551623 0.040654
+v -0.128092 0.551623 -0.040654
+v 0.128092 0.489106 -0.040654
+v 0.128092 0.489106 0.040654
+v 0.128092 0.551623 -0.040654
+v 0.128092 0.551623 0.040654
+v 0.103989 0.400565 -0.024672
+v 0.103989 0.400565 0.024672
+v -0.103989 0.400565 0.024672
+v -0.103989 0.400565 -0.024672
+v -0.122195 0.400565 0.024672
+v -0.122195 0.400565 -0.024672
+v 0.122195 0.400565 -0.024672
+v 0.122195 0.400565 0.024672
+v 0.098092 0.353791 -0.040654
+v 0.098092 0.335624 0.040654
+v -0.098092 0.335624 0.040654
+v -0.098092 0.353791 -0.040654
+v -0.128092 0.335624 0.040654
+v -0.128092 0.353791 -0.040654
+v 0.128092 0.353791 -0.040654
+v 0.128092 0.335624 0.040654
+v 0.098092 0.234285 -0.079572
+v 0.098092 0.234285 -0.048174
+v -0.098092 0.234285 -0.048174
+v -0.098092 0.234285 -0.079572
+v -0.128092 0.234285 -0.048174
+v -0.128092 0.234285 -0.079572
+v 0.128092 0.234285 -0.079572
+v 0.128092 0.234285 -0.048174
+v 0.098092 0.207583 -0.104626
+v 0.098092 0.192117 -0.077302
+v -0.098092 0.192117 -0.077302
+v -0.098092 0.207583 -0.104626
+v -0.128092 0.192117 -0.077302
+v -0.128092 0.207583 -0.104626
+v 0.128092 0.207583 -0.104626
+v 0.128092 0.192117 -0.077302
+v 0.105592 0.186814 -0.107362
+v 0.105592 0.179081 -0.093700
+v -0.105592 0.179081 -0.093700
+v -0.105592 0.186814 -0.107362
+v -0.120592 0.179081 -0.093700
+v -0.120592 0.186814 -0.107362
+v 0.120592 0.186814 -0.107362
+v 0.120592 0.179081 -0.093700
+vt 0.361776 0.180764
+vt 0.235740 0.386301
+vt 0.181260 0.180764
+vt 0.180764 0.361279
+vt 0.000248 0.180764
+vt 0.180764 0.180764
+vt 0.369050 0.183648
+vt 0.552126 0.000570
+vt 0.369049 0.000570
+vt 0.180764 0.000248
+vt 0.000248 0.000248
+vt 0.369070 0.183679
+vt 0.552146 0.000601
+vt 0.369069 0.000601
+vt 0.181260 0.000248
+vt 0.361776 0.000248
+vt 0.424310 0.392101
+vt 0.525368 0.529051
+vt 0.496874 0.392099
+vt 0.054728 0.566817
+vt 0.000248 0.361279
+vt 0.552126 0.183647
+vt 0.496894 0.392130
+vt 0.552146 0.183678
+vt 0.335400 0.521364
+vt 0.207635 0.619603
+vt 0.207635 0.521364
+vt 0.126284 0.566817
+vt 0.026623 0.701880
+vt 0.307296 0.386301
+vt 0.424331 0.392131
+vt 0.525388 0.529082
+vt 0.394883 0.635328
+vt 0.492928 0.676593
+vt 0.524420 0.635324
+vt 0.492176 0.604967
+vt 0.524440 0.635354
+vt 0.492156 0.604936
+vt 0.154389 0.701880
+vt 0.026623 0.800118
+vt 0.123324 0.840820
+vt 0.057687 0.857945
+vt 0.057687 0.840820
+vt 0.154388 0.800118
+vt 0.335400 0.619603
+vt 0.238699 0.660305
+vt 0.394903 0.635358
+vt 0.492948 0.676623
+vt 0.304336 0.677429
+vt 0.223885 0.701413
+vt 0.238699 0.677429
+vt 0.304336 0.660305
+vt 0.426397 0.676626
+vt 0.492952 0.693988
+vt 0.426377 0.676595
+vt 0.492931 0.693957
+vt 0.411350 0.718281
+vt 0.512924 0.790039
+vt 0.507958 0.718279
+vt 0.426395 0.693990
+vt 0.507978 0.718310
+vt 0.426375 0.693959
+vt 0.123324 0.857945
+vt 0.042873 0.881929
+vt 0.324045 0.772175
+vt 0.245726 0.819236
+vt 0.218990 0.772175
+vt 0.138139 0.881929
+vt 0.037978 0.952691
+vt 0.319151 0.701413
+vt 0.411371 0.718312
+vt 0.512944 0.790070
+vt 0.297309 0.819236
+vt 0.245726 0.870819
+vt 0.406408 0.790072
+vt 0.485832 0.837796
+vt 0.406388 0.790041
+vt 0.485812 0.837765
+vt 0.143033 0.952691
+vt 0.064714 0.999752
+vt 0.713930 0.424338
+vt 0.694279 0.357676
+vt 0.723983 0.362427
+vt 0.395840 0.529085
+vt 0.490002 0.556727
+vt 0.428108 0.559472
+vt 0.430285 0.607712
+vt 0.805257 0.424346
+vt 0.824602 0.359773
+vt 0.795794 0.364314
+vt 0.430265 0.607682
+vt 0.428088 0.559442
+vt 0.395820 0.529055
+vt 0.489982 0.556697
+vt 0.664224 0.846564
+vt 0.746037 0.889876
+vt 0.736569 0.834250
+vt 0.750581 0.916569
+vt 0.673692 0.902190
+vt 0.678235 0.928883
+vt 0.723967 0.362496
+vt 0.684255 0.419532
+vt 0.713935 0.424346
+vt 0.786539 0.271717
+vt 0.795802 0.364322
+vt 0.736444 0.835025
+vt 0.673566 0.902965
+vt 0.664098 0.847339
+vt 0.708784 0.758489
+vt 0.834068 0.419902
+vt 0.805287 0.424405
+vt 0.678110 0.929659
+vt 0.745912 0.890651
+vt 0.750455 0.917345
+vt 0.805320 0.271717
+vt 0.793170 0.221110
+vt 0.786556 0.271717
+vt 0.664879 0.765962
+vt 0.715864 0.714120
+vt 0.714546 0.271717
+vt 0.732661 0.271717
+vt 0.665005 0.765187
+vt 0.714559 0.271717
+vt 0.694287 0.357682
+vt 0.805282 0.271717
+vt 0.824644 0.359803
+vt 0.732728 0.271717
+vt 0.793130 0.221103
+vt 0.769253 0.105121
+vt 0.818474 0.217189
+vt 0.729794 0.227227
+vt 0.745617 0.117066
+vt 0.729795 0.227223
+vt 0.703205 0.231114
+vt 0.715990 0.713345
+vt 0.640888 0.709596
+vt 0.718318 0.110819
+vt 0.685736 0.083383
+vt 0.684225 0.118309
+vt 0.684224 0.118316
+vt 0.706537 0.090094
+vt 0.718335 0.110798
+vt 0.704313 0.606663
+vt 0.732243 0.601870
+vt 0.818563 0.217058
+vt 0.745628 0.117077
+vt 0.703207 0.231088
+vt 0.704438 0.605888
+vt 0.708302 0.063056
+vt 0.716731 0.075033
+vt 0.730769 0.082255
+vt 0.716725 0.075013
+vt 0.706397 0.089989
+vt 0.732369 0.601095
+vt 0.723913 0.563930
+vt 0.730783 0.082228
+vt 0.745767 0.066489
+vt 0.723788 0.564705
+vt 0.750455 0.574292
+vt 0.769255 0.105132
+vt 0.723585 0.072741
+vt 0.708355 0.063063
+vt 0.719794 0.061995
+vt 0.723592 0.072791
+vt 0.750271 0.553437
+vt 0.736937 0.548643
+vt 0.750146 0.554212
+vt 0.719785 0.061964
+vt 0.297309 0.870819
+vt 0.433522 0.837797
+vt 0.433502 0.837766
+vt 0.116297 0.999752
+vt 0.684273 0.419554
+vt 0.834065 0.419805
+vt 0.640762 0.710371
+vt 0.708910 0.757714
+vt 0.685810 0.083269
+vt 0.750581 0.573517
+vt 0.745754 0.066490
+vt 0.736812 0.549418
+vn 0.0000 0.2651 -0.9642
+vn 0.0000 0.0000 1.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn -0.9781 -0.2081 0.0000
+vn 0.0000 0.2651 0.9642
+vn -0.9642 0.2651 0.0000
+vn 0.9642 0.2651 0.0000
+vn 0.0000 -0.2081 0.9781
+vn 0.0000 -0.2081 -0.9781
+vn 0.9781 -0.2081 0.0000
+vn -0.6461 0.7632 0.0000
+vn 0.7408 0.0000 0.6717
+vn -0.7408 0.0000 -0.6717
+vn 0.0000 0.7632 0.6461
+vn 0.0000 0.7632 -0.6461
+vn 0.6461 0.7632 0.0000
+vn 0.0000 -0.6177 -0.7864
+vn -0.9976 -0.0692 0.0000
+vn 0.7864 -0.6177 0.0000
+vn -0.7864 -0.6177 0.0000
+vn 0.0000 -0.6177 0.7864
+vn 0.0000 0.5681 -0.8229
+vn 0.0000 -0.0692 0.9976
+vn 0.0000 -0.0692 -0.9976
+vn 0.9976 -0.0692 0.0000
+vn 0.0000 1.0000 0.0000
+vn 0.8229 0.5681 0.0000
+vn -0.8229 0.5681 0.0000
+vn 0.0000 0.5681 0.8229
+vn 0.6468 -0.7627 0.0000
+vn 0.7408 0.0000 -0.6717
+vn 0.6468 0.7627 0.0000
+vn -0.6468 0.7627 0.0000
+vn -0.7408 0.0000 0.6717
+vn -0.6468 -0.7627 0.0000
+vn -0.9978 -0.0665 0.0000
+vn 0.9978 -0.0665 0.0000
+vn 0.0000 0.2390 0.9710
+vn 0.9921 0.1251 0.0000
+vn 0.0000 -0.1776 -0.9841
+vn 0.0000 -0.1776 0.9841
+vn 0.0000 -0.6592 0.7520
+vn 0.0000 0.3233 -0.9463
+vn -0.9952 0.0956 0.0214
+vn 0.0000 0.6843 -0.7292
+vn 0.0000 0.3097 -0.9509
+vn 0.0000 0.3097 -0.9508
+vn 0.0000 0.1306 -0.9914
+vn 0.9329 -0.3135 -0.1774
+vn 0.0000 -0.5684 0.8228
+vn 0.0000 -0.8703 -0.4926
+vn -0.9329 -0.3135 -0.1774
+vn 0.0000 -0.7828 0.6223
+vn 0.9952 0.0956 0.0214
+vn -0.9921 0.1251 0.0000
+usemtl Material.003
+s off
+f 5/1/1 11/2/1 1/3/1
+f 3/4/2 8/5/2 4/6/2
+f 7/7/3 6/8/3 8/9/3
+f 2/10/4 8/5/4 6/11/4
+f 1/12/5 4/13/5 2/14/5
+f 5/1/6 2/15/6 6/16/6
+f 10/17/7 16/18/7 12/19/7
+f 3/4/8 10/20/8 7/21/8
+f 7/7/9 12/19/9 5/22/9
+f 1/12/10 9/23/10 3/24/10
+f 16/25/6 19/26/6 15/27/6
+f 9/28/11 14/29/11 10/20/11
+f 12/30/12 15/27/12 11/2/12
+f 11/31/13 13/32/13 9/23/13
+f 18/33/14 24/34/14 20/35/14
+f 13/32/15 44/36/15 17/37/15
+f 16/18/16 48/38/16 20/35/16
+f 13/39/2 18/40/2 14/29/2
+f 21/41/2 26/42/2 22/43/2
+f 17/44/17 22/43/17 18/40/17
+f 20/45/18 23/46/18 19/26/18
+f 19/47/19 21/48/19 17/37/19
+f 28/49/20 31/50/20 27/51/20
+f 24/52/6 27/51/6 23/46/6
+f 23/53/5 25/54/5 21/48/5
+f 22/55/3 28/56/3 24/34/3
+f 30/57/21 36/58/21 32/59/21
+f 27/60/22 29/61/22 25/54/22
+f 26/62/23 32/59/23 28/56/23
+f 25/63/24 30/64/24 26/42/24
+f 36/65/25 39/66/25 35/67/25
+f 29/68/26 34/69/26 30/64/26
+f 32/70/27 35/67/27 31/50/27
+f 31/71/28 33/72/28 29/61/28
+f 40/73/29 37/74/29 39/66/29
+f 35/75/30 37/76/30 33/72/30
+f 34/77/31 40/78/31 36/58/31
+f 33/79/32 38/80/32 34/69/32
+f 43/81/6 53/82/6 41/83/6
+f 15/84/33 42/85/33 13/32/33
+f 19/47/34 41/86/34 15/84/34
+f 17/37/35 43/87/35 19/47/35
+f 47/88/2 49/89/2 45/90/2
+f 20/35/36 47/91/36 18/33/36
+f 18/33/37 45/92/37 14/93/37
+f 14/93/38 46/94/38 16/18/38
+f 49/95/3 52/96/3 50/97/3
+f 48/98/29 51/99/29 47/100/29
+f 46/101/6 52/102/6 48/103/6
+f 41/83/39 58/104/39 42/105/39
+f 53/106/5 56/107/5 54/108/5
+f 54/108/40 63/109/40 53/106/40
+f 42/105/2 56/110/2 44/111/2
+f 44/112/29 55/113/29 43/114/29
+f 61/115/41 67/116/41 59/117/41
+f 64/118/42 71/119/42 63/109/42
+f 41/83/43 63/120/43 57/121/43
+f 50/97/39 61/122/39 49/95/39
+f 46/101/43 62/123/43 50/124/43
+f 45/90/44 61/115/44 59/117/44
+f 42/105/44 64/125/44 54/126/44
+f 45/90/40 60/127/40 46/101/40
+f 66/128/45 80/129/45 72/130/45
+f 65/131/3 74/132/3 66/128/3
+f 59/117/42 68/133/42 60/127/42
+f 63/120/46 65/131/46 57/121/46
+f 62/123/46 68/133/46 70/134/46
+f 61/122/47 70/135/47 69/136/47
+f 58/104/47 65/131/47 66/128/47
+f 58/104/41 72/130/41 64/125/41
+f 76/137/48 86/138/48 78/139/48
+f 79/140/48 81/141/48 73/142/48
+f 71/119/5 80/143/5 79/144/5
+f 69/145/45 75/146/45 67/116/45
+f 68/133/5 75/146/5 76/137/5
+f 71/147/49 73/142/49 65/131/49
+f 68/133/50 78/139/50 70/134/50
+f 70/135/3 77/148/3 69/136/3
+f 81/141/51 95/149/51 89/150/51
+f 83/151/52 92/152/52 84/153/52
+f 78/154/3 85/155/3 77/148/3
+f 73/142/3 82/156/3 74/132/3
+f 74/132/53 88/157/53 80/129/53
+f 79/144/5 88/158/5 87/159/5
+f 77/160/53 83/151/53 75/146/53
+f 76/137/5 83/151/5 84/153/5
+f 91/161/54 94/162/54 92/152/54
+f 89/150/54 96/163/54 90/164/54
+f 84/153/51 94/162/51 86/138/51
+f 85/155/55 94/165/55 93/166/55
+f 82/156/55 89/150/55 90/164/55
+f 82/156/56 96/163/56 88/157/56
+f 88/158/52 95/167/52 87/159/52
+f 83/151/56 93/168/56 91/161/56
+f 5/1/1 12/30/1 11/2/1
+f 3/4/2 7/21/2 8/5/2
+f 7/7/3 5/22/3 6/8/3
+f 2/10/4 4/6/4 8/5/4
+f 1/12/5 3/24/5 4/13/5
+f 5/1/6 1/3/6 2/15/6
+f 10/17/7 14/93/7 16/18/7
+f 3/4/8 9/28/8 10/20/8
+f 7/7/9 10/17/9 12/19/9
+f 1/12/10 11/31/10 9/23/10
+f 16/25/6 20/45/6 19/26/6
+f 9/28/11 13/39/11 14/29/11
+f 12/30/12 16/25/12 15/27/12
+f 11/31/13 15/84/13 13/32/13
+f 18/33/14 22/55/14 24/34/14
+f 13/32/15 42/85/15 44/36/15
+f 16/18/16 46/94/16 48/38/16
+f 13/39/2 17/44/2 18/40/2
+f 21/41/2 25/63/2 26/42/2
+f 17/44/17 21/41/17 22/43/17
+f 20/45/18 24/52/18 23/46/18
+f 19/47/19 23/53/19 21/48/19
+f 28/49/20 32/70/20 31/50/20
+f 24/52/6 28/49/6 27/51/6
+f 23/53/5 27/60/5 25/54/5
+f 22/55/3 26/62/3 28/56/3
+f 30/57/21 34/77/21 36/58/21
+f 27/60/22 31/71/22 29/61/22
+f 26/62/23 30/57/23 32/59/23
+f 25/63/24 29/68/24 30/64/24
+f 36/65/25 40/73/25 39/66/25
+f 29/68/26 33/79/26 34/69/26
+f 32/70/27 36/65/27 35/67/27
+f 31/71/28 35/75/28 33/72/28
+f 40/73/29 38/169/29 37/74/29
+f 35/75/30 39/170/30 37/76/30
+f 34/77/31 38/171/31 40/78/31
+f 33/79/32 37/172/32 38/80/32
+f 43/81/6 55/173/6 53/82/6
+f 15/84/33 41/86/33 42/85/33
+f 19/47/34 43/87/34 41/86/34
+f 17/37/35 44/36/35 43/87/35
+f 47/88/2 51/174/2 49/89/2
+f 20/35/36 48/38/36 47/91/36
+f 18/33/37 47/91/37 45/92/37
+f 14/93/38 45/92/38 46/94/38
+f 49/95/3 51/99/3 52/96/3
+f 48/98/29 52/96/29 51/99/29
+f 46/101/6 50/124/6 52/102/6
+f 41/83/39 57/121/39 58/104/39
+f 53/106/5 55/113/5 56/107/5
+f 54/108/40 64/118/40 63/109/40
+f 42/105/2 54/126/2 56/110/2
+f 44/112/29 56/107/29 55/113/29
+f 61/115/41 69/145/41 67/116/41
+f 64/118/57 72/175/57 71/119/57
+f 41/83/43 53/82/43 63/120/43
+f 50/97/39 62/176/39 61/122/39
+f 46/101/43 60/127/43 62/123/43
+f 45/90/44 49/89/44 61/115/44
+f 42/105/44 58/104/44 64/125/44
+f 45/90/40 59/117/40 60/127/40
+f 66/128/45 74/132/45 80/129/45
+f 65/131/3 73/142/3 74/132/3
+f 59/117/57 67/116/57 68/133/57
+f 63/120/46 71/147/46 65/131/46
+f 62/123/46 60/127/46 68/133/46
+f 61/122/58 62/176/58 70/135/58
+f 58/104/58 57/121/58 65/131/58
+f 58/104/41 66/128/41 72/130/41
+f 76/137/48 84/153/48 86/138/48
+f 79/140/48 87/177/48 81/141/48
+f 71/119/5 72/175/5 80/143/5
+f 69/145/45 77/160/45 75/146/45
+f 68/133/5 67/116/5 75/146/5
+f 71/147/50 79/140/50 73/142/50
+f 68/133/50 76/137/50 78/139/50
+f 70/135/3 78/154/3 77/148/3
+f 81/141/51 87/177/51 95/149/51
+f 83/151/52 91/161/52 92/152/52
+f 78/154/3 86/178/3 85/155/3
+f 73/142/3 81/141/3 82/156/3
+f 74/132/53 82/156/53 88/157/53
+f 79/144/5 80/143/5 88/158/5
+f 77/160/53 85/179/53 83/151/53
+f 76/137/5 75/146/5 83/151/5
+f 91/161/54 93/168/54 94/162/54
+f 89/150/54 95/149/54 96/163/54
+f 84/153/51 92/152/51 94/162/51
+f 85/155/55 86/178/55 94/165/55
+f 82/156/55 81/141/55 89/150/55
+f 82/156/56 90/164/56 96/163/56
+f 88/158/52 96/180/52 95/167/52
+f 83/151/56 85/179/56 93/168/56
diff --git a/aswebglue/examples/robots.blend b/aswebglue/examples/robots.blend
new file mode 100644
index 0000000..c6e9c6e
Binary files /dev/null and b/aswebglue/examples/robots.blend differ
diff --git a/aswebglue/examples/spaceship.blend b/aswebglue/examples/spaceship.blend
new file mode 100644
index 0000000..e8c8dd3
Binary files /dev/null and b/aswebglue/examples/spaceship.blend differ
diff --git a/aswebglue/examples/spaceship.blend1 b/aswebglue/examples/spaceship.blend1
new file mode 100644
index 0000000..4948fcf
Binary files /dev/null and b/aswebglue/examples/spaceship.blend1 differ
diff --git a/aswebglue/examples/spaceship.dae b/aswebglue/examples/spaceship.dae
new file mode 100644
index 0000000..013ba07
--- /dev/null
+++ b/aswebglue/examples/spaceship.dae
@@ -0,0 +1,188 @@
+
+
+
+
+ Blender User
+ Blender 2.90.1 commit date:2020-09-23, commit time:06:43, hash:3e85bb34d0d7
+
+ 2020-10-27T10:32:12
+ 2020-10-27T10:32:12
+
+ Z_UP
+
+
+
+
+
+
+ 39.59775
+ 1.777778
+ 0.1
+ 100
+
+
+
+
+
+ 0
+ 0
+ 10
+
+
+
+
+
+
+
+
+ 1000 1000 1000
+ 1
+ 0
+ 0.00111109
+
+
+
+
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1000
+ 29.99998
+ 75
+ 0.15
+ 0
+ 1
+ 2
+ 0.04999995
+ 30.002
+ 1
+ 3
+ 2880
+ 3
+ 1
+ 1
+ 0.1
+ 0.1
+ 1
+
+
+
+
+
+
+
+
+
+ spaceship_uv_psd
+
+
+
+
+ spaceship_uv_psd-surface
+
+
+
+
+
+ 0 0 0 1
+
+
+
+
+
+ 1.45
+
+
+
+
+
+
+
+
+ spaceship_uv.jpg
+
+
+
+
+
+
+
+
+
+
+
+ -0.5080005 -0.3293023 -0.4293475 -0.5080004 -0.190822 0.4293475 -0.5080006 0.4293475 -0.4293475 -0.5080004 0.2307115 0.4293475 2.474506 -0.3293023 -0.2292571 2.474506 -0.2307115 0.2292571 2.474506 0.3293023 -0.2292571 2.474506 0.2307115 0.2292571 -0.4293475 -0.5053156 -0.07476633 2.230384 -0.5053156 -0.07476633 -0.4293475 -0.5053156 -0.3057641 2.230384 0.5053156 -0.07476633 2.230384 0.5053156 -0.3057641 -0.4293475 0.5053156 -0.3057641 -0.4293475 0.5053156 -0.07476633 2.230384 -0.5053156 -0.3057641 -1.0882 -2.242754 -0.7874542 0.4914309 -2.242754 -0.7874542 -1.0882 -2.242754 -0.8376441 0.4914309 2.242754 -0.7874542 0.4914309 2.242754 -0.8376441 -1.0882 2.242754 -0.8376441 -1.0882 2.242754 -0.7874542 0.4914309 -2.242754 -0.8376441 -0.8984084 -0.3059713 -0.0871312 -0.8984084 -0.3059713 0.0871312 -0.8984084 0.3059713 -0.0871312 -0.8984084 0.3059713 0.0871312 2.987725 -0.2292571 0.1186384 2.987725 0.2292571 0.1186384 2.987725 0.2292571 -0.1868323 2.987725 -0.2292571 -0.1868323 3.281896 -0.1188507 -0.04551059 3.281896 0.1188507 -0.04551059 3.281896 0.1188507 -0.145156 3.281896 -0.1188507 -0.145156 -1.0882 -2.298308 -0.7874542 0.4914309 -2.298308 -0.7874542 -1.0882 -2.298308 -0.8376441 0.4914309 2.298308 -0.7874542 0.4914309 2.298308 -0.8376441 -1.0882 2.298308 -0.8376441 -1.0882 2.298308 -0.7874542 0.4914309 -2.298308 -0.8376441 1.995218 2.242754 -0.7874542 1.995218 2.242754 -0.8376441 1.995218 -2.242754 -0.8376441 1.995218 -2.242754 -0.7874542 1.995218 2.298308 -0.7874542 1.995218 2.298308 -0.8376441 1.995218 -2.298308 -0.8376441 1.995218 -2.298308 -0.7874542 2.040476 2.214977 -0.7623593 2.040476 2.214977 -0.8627391 2.040476 -2.214977 -0.8627391 2.040476 -2.214977 -0.7623593 2.040476 2.326085 -0.7623593 2.040476 2.326085 -0.8627391 2.040476 -2.326085 -0.8627391 2.040476 -2.326085 -0.7623593 2.137026 2.242754 -0.7874543 2.137026 2.242754 -0.8376441 2.137026 -2.242754 -0.8376441 2.137026 -2.242754 -0.7874543 2.137026 2.298308 -0.7874543 2.137026 2.298308 -0.8376441 2.137026 -2.298308 -0.8376441 2.137026 -2.298308 -0.7874543
+
+
+
+
+
+
+
+
+
+ -0.0669375 0 0.9977572 0.8904827 -0.4433109 -0.1025483 -0.2107005 0 -0.9775508 -0.0669375 0 -0.9977573 0.1096706 -0.9683961 -0.2240124 0 -0.851915 0.5236802 0.935029 0.3545713 0 0 0.2927199 0.9561982 0.9129918 0.4079779 0 -0.6422606 0.749359 -0.1611289 -0.584841 -0.8111479 0 0 0.8484349 -0.5292997 -0.06335812 -0.3226255 0.9444039 -0.04361641 -0.7585639 -0.6501373 0 0 1 0 0 -1 0.9350288 -0.3545718 0 0 -0.3795074 -0.9251888 -0.7067987 0.7074148 0 -0.7067984 -0.707415 0 0 0.3795075 -0.9251888 0 -0.2927199 0.9561982 1 0 0 -0.1499123 0.9760881 -0.1574121 0.6591691 0 -0.7519948 0.6591693 0 0.7519947 -0.1402729 0 0.990113 -0.08238309 0 0.9966008 -0.1913353 0.9815248 0 -0.04802513 -0.9765266 -0.2099751 -1 0 0 -0.3513807 -0.9362327 0 -0.3513797 0.9362331 0 -0.4872763 0 -0.8732479 0 -1 0 0 1 0 0.4849263 0 -0.874555 0.4849263 0 0.874555 -0.2764788 0.9610201 0 -0.2515589 0 0.9678421 0.5230858 -0.8522801 0 0.5230748 0.8522869 0 0.4849226 0 -0.8745571 0.4849265 0 0.8745549 0.5230783 0.8522847 0 0.5230827 -0.8522821 0 -0.2764791 -0.9610199 0 -0.2515595 0 -0.9678419 -0.0669375 0 0.9977573 0.6947231 -0.7192773 0 -0.2107004 0 -0.9775508 -0.0669375 0 -0.9977572 -0.1892876 -0.9819218 0 -0.05177301 0.3368392 0.9401378 0.9350288 0.3545718 0 0 0.2927199 0.9561982 0.9462986 0.3191701 -0.05147206 -0.584841 0.8111479 0 -0.6422606 -0.749359 -0.1611289 -0.03383153 0.755037 -0.6548088 0 0.5746294 0.8184137 0 -0.8781644 -0.4783592 0.935029 -0.3545713 0 0 -0.3795075 -0.9251888 -0.7067984 0.707415 0 -0.7067987 -0.7074148 0 0 0.3795074 -0.9251888 0 -0.2927199 0.9561982 0.05965405 0.9982192 0 0.6591692 0 -0.7519948 0.6591691 1.51333e-7 0.7519948 -0.1402728 0 0.9901129 -0.08238315 0 0.9966008 -0.04802513 0.9765266 -0.2099751 -0.1913353 -0.9815248 0 -0.3513797 -0.9362331 0 -0.3513807 0.9362327 0 -0.4872762 0 -0.8732479 -0.2764789 0.9610201 0 -0.2515594 0 0.9678419 0.5230783 -0.8522847 0 0.5230827 0.8522821 0 0.5230858 0.8522801 0 0.5230748 -0.8522869 0 -0.2764782 -0.9610202 0 -0.2515594 0 -0.9678419
+
+
+
+
+
+
+
+
+
+ 0.4688237 0.3132958 0.09985619 0.2354346 0.4688237 0.2237295 0.7692161 0.2220173 0.8113293 0.2362911 0.8493113 0.2925399 0.9883738 0.777047 0.9318382 0.8385524 0.9313144 0.777047 0.9365814 0.4242164 0.9883738 0.777047 0.9313144 0.777047 0.2744556 0.6513352 0.2260814 0.5901898 0.2744556 0.5492355 0.4688237 0.2237295 0.1300036 0.2146921 0.4591979 0.2147011 0.7865208 0.2227362 0.84592 0.008576214 0.8113293 0.2362911 0.4591979 0.2147011 0.3447641 0.009831249 0.5402746 0.009836614 0.06915962 0.6158833 0.1186158 0.6127154 0.09421312 0.6269246 0.8670988 0.7235839 0.8828522 0.6890979 0.9243274 0.7221848 0.01216995 0.6433725 0.02851217 0.6730862 0 0.6712716 0.9243274 0.3818594 0.8828522 0.6890979 0.860601 0.3862308 0.4688237 0.3132958 0.1300037 0.3340072 0.09985619 0.3131895 0.06915962 1 0.02851217 0.6730862 0.06915962 0.6471173 0.5402746 0.5393961 0.3447641 0.5459493 0.3447641 0.5393907 0.7532354 0.5763288 0.7619072 0.7620059 0.755038 0.7620913 0.09421312 0.6269246 0.1475068 0.8210912 0.1422047 0.8241786 0.5430833 0.06907653 0.7606782 0.1857636 0.5402746 0.3818594 0.8543736 0.6912784 0.7680948 0.4461902 0.8828522 0.6890979 0.1510471 0.5595853 0.1774994 0.7709457 0.171752 0.7731945 0.5433099 0.6946403 0.7532354 0.5763288 0.755038 0.7620913 0.4591979 0.3340163 0.3447641 0.5393907 0.1300037 0.3340072 0.3208565 0.5492355 0.2992883 0.6207958 0.2992883 0.5492606 0.2260814 0.6512312 0.1774994 0.5915936 0.2260814 0.5492355 0.9365814 0.4242164 1 0.3818594 0.9887081 0.4242165 0.4688237 0.3132958 0.5174464 0.2381323 0.5174465 0.3103783 0.03637278 0.301356 0 0.2602374 0.03637278 0.2472238 0.09985619 0.3131895 0.03637278 0.2472238 0.09985619 0.2354346 0.8670988 0.7235839 0.9149936 0.7817131 0.8773336 0.7845965 0.01216995 0.6433725 0.05976152 0.5857982 0.06915962 0.6471173 0.3331899 0.5492355 0.3208565 0.5772988 0.3208565 0.5492355 0.02205705 0.5833986 0.04237878 0.5500182 0.05976152 0.5857982 0.8773336 0.7845965 0.898002 0.8200404 0.8857172 0.8209809 0.988538 0.8385524 0.9462191 0.8748536 0.9318382 0.8385524 0.8586401 0 0.8523659 0.1864833 0.8524314 0 0.8664346 0.180323 0.874144 0 0.8726422 0.18031 0.3447641 0.009831249 0.5402746 0.003277957 0.5402746 0.009836614 0.8405297 0.005631089 0.8493113 0.002945065 0.84592 0.008576214 0.1475068 0.8210912 0.145745 0.8297256 0.1422047 0.8241786 0.7623463 0 0.767548 0.185795 0.7606782 0.1857636 0.8726422 0.18031 0.8650051 0.3519756 0.8664346 0.180323 0.767548 0.185795 0.7590903 0.3626081 0.7606782 0.1857636 0.7583884 0.3994001 0.7481689 0.3944649 0.7619072 0.3942941 0.1586408 0.003267467 0.153017 0.01311737 0.153017 0 0.8585747 0.1864833 0.8523037 0.364013 0.8523659 0.1864833 0.3447641 0.5459493 0.1586408 0.5393856 0.3447641 0.5393907 0.3447641 0.009831249 0.1586408 0.003267467 0.3447641 0.003272593 0.7532354 0.5763288 0.7583884 0.3994001 0.7601045 0.5762434 0.283719 0.5492355 0.277448 0.7267652 0.2775103 0.5492355 0.2879707 0.7370714 0.2960021 0.5654221 0.2941783 0.7370714 0.874144 0.3562849 0.8648703 0.3681626 0.8617288 0.3563109 0.1530171 0.5492355 0.1410893 0.5393851 0.1530171 0.5361182 0.8585124 0.364013 0.8493113 0.3693891 0.8523037 0.364013 0.2960021 0.5654221 0.2868731 0.5610938 0.2992883 0.5610938 0.76596 0.3626394 0.7554768 0.3676533 0.7590903 0.3626081 0.1586408 0.5459442 0.1530171 0.5361182 0.1586408 0.5393856 0.8650051 0.3519756 0.874144 0.3562849 0.8617288 0.3563109 0.2836568 0.7267652 0.2744556 0.7321412 0.277448 0.7267652 0.3456142 0.5492355 0.339402 0.5557943 0.339402 0.5492355 0.3331899 0.5557943 0.3394021 0.5492355 0.3394021 0.5557943 0.2868731 0.7321412 0.2774422 0.7435063 0.2744556 0.7321412 0.153017 0.01311737 0.1410892 0.00326693 0.153017 0 0.7481689 0.3944649 0.7582266 0.3827236 0.7619072 0.3942941 0.8617288 0.3693891 0.8522979 0.3807542 0.8493113 0.3693891 0.2868731 0.5610938 0.2961741 0.5492355 0.2992883 0.5610938 0.7692161 0.3677161 0.7589406 0.3792846 0.7554768 0.3676533 0.4688237 0.3132958 0.09985619 0.3131895 0.09985619 0.2354346 0.7692161 0.2220173 0.7865208 0.2227362 0.8113293 0.2362911 0.9883738 0.777047 0.988538 0.8385524 0.9318382 0.8385524 0.9365814 0.4242164 0.9887081 0.4242165 0.9883738 0.777047 0.2744556 0.6513352 0.2261314 0.6107521 0.2260814 0.5901898 0.4688237 0.2237295 0.09985619 0.2354346 0.1300036 0.2146921 0.7865208 0.2227362 0.8405297 0.005631089 0.84592 0.008576214 0.4591979 0.2147011 0.1300036 0.2146921 0.3447641 0.009831249 0.06915962 0.6158833 0.1510471 0.5492355 0.1186158 0.6127154 0.8670988 0.7235839 0.8543736 0.6912784 0.8828522 0.6890979 0.01216995 0.6433725 0.06915962 0.6471173 0.02851217 0.6730862 0.9243274 0.3818594 0.9243274 0.7221848 0.8828522 0.6890979 0.4688237 0.3132958 0.4591979 0.3340163 0.1300037 0.3340072 0.06915962 1 0.006487667 0.9863773 0.02851217 0.6730862 0.5402746 0.5393961 0.5402746 0.5459548 0.3447641 0.5459493 0.7532354 0.5763288 0.7601045 0.5762434 0.7619072 0.7620059 0.09421312 0.6269246 0.1186158 0.6127154 0.1475068 0.8210912 0.5430833 0.06907653 0.7623463 0 0.7606782 0.1857636 0.8543736 0.6912784 0.7619072 0.446664 0.7680948 0.4461902 0.1510471 0.5595853 0.1774994 0.5492355 0.1774994 0.7709457 0.5433099 0.6946403 0.5402746 0.3818594 0.7532354 0.5763288 0.4591979 0.3340163 0.5402746 0.5393961 0.3447641 0.5393907 0.3208565 0.5492355 0.3208565 0.6207706 0.2992883 0.6207958 0.2260814 0.6512312 0.1783819 0.6121348 0.1774994 0.5915936 0.9365814 0.4242164 0.9243273 0.3818594 1 0.3818594 0.4688237 0.3132958 0.4688237 0.2237295 0.5174464 0.2381323 0.03637278 0.301356 0 0.2883005 0 0.2602374 0.09985619 0.3131895 0.03637278 0.301356 0.03637278 0.2472238 0.8670988 0.7235839 0.9243274 0.7221848 0.9149936 0.7817131 0.01216995 0.6433725 0.02205705 0.5833986 0.05976152 0.5857982 0.3331899 0.5492355 0.3331899 0.5772988 0.3208565 0.5772988 0.02205705 0.5833986 0.03007948 0.5492355 0.04237878 0.5500182 0.8773336 0.7845965 0.9149936 0.7817131 0.898002 0.8200404 0.988538 0.8385524 0.9756132 0.8748536 0.9462191 0.8748536 0.8586401 0 0.8585747 0.1864833 0.8523659 0.1864833 0.8664346 0.180323 0.8679364 1.29621e-5 0.874144 0 0.3447641 0.009831249 0.3447641 0.003272593 0.5402746 0.003277957 0.8405297 0.005631089 0.843921 0 0.8493113 0.002945065 0.1475068 0.8210912 0.1510471 0.8266384 0.145745 0.8297256 0.7623463 0 0.769216 3.1399e-5 0.767548 0.185795 0.8726422 0.18031 0.8712127 0.3519627 0.8650051 0.3519756 0.767548 0.185795 0.76596 0.3626394 0.7590903 0.3626081 0.7583884 0.3994001 0.7515193 0.3994854 0.7481689 0.3944649 0.1586408 0.003267467 0.1586408 0.009826123 0.153017 0.01311737 0.8585747 0.1864833 0.8585124 0.364013 0.8523037 0.364013 0.3447641 0.5459493 0.1586408 0.5459442 0.1586408 0.5393856 0.3447641 0.009831249 0.1586408 0.009826123 0.1586408 0.003267467 0.7532354 0.5763288 0.7515193 0.3994854 0.7583884 0.3994001 0.283719 0.5492355 0.2836568 0.7267652 0.277448 0.7267652 0.2879707 0.7370714 0.2897945 0.5654221 0.2960021 0.5654221 0.874144 0.3562849 0.8710778 0.3681496 0.8648703 0.3681626 0.1530171 0.5492355 0.1410893 0.5459437 0.1410893 0.5393851 0.8585124 0.364013 0.8617288 0.3693891 0.8493113 0.3693891 0.2960021 0.5654221 0.2897945 0.5654221 0.2868731 0.5610938 0.76596 0.3626394 0.7692161 0.3677161 0.7554768 0.3676533 0.1586408 0.5459442 0.1530171 0.5492355 0.1530171 0.5361182 0.8650051 0.3519756 0.8712127 0.3519627 0.874144 0.3562849 0.2836568 0.7267652 0.2868731 0.7321412 0.2744556 0.7321412 0.3456142 0.5492355 0.3456142 0.5557943 0.339402 0.5557943 0.3331899 0.5557943 0.3331899 0.5492355 0.3394021 0.5492355 0.2868731 0.7321412 0.2836509 0.7435063 0.2774422 0.7435063 0.153017 0.01311737 0.1410892 0.009825646 0.1410892 0.00326693 0.7481689 0.3944649 0.7513574 0.382809 0.7582266 0.3827236 0.8617288 0.3693891 0.8585066 0.3807542 0.8522979 0.3807542 0.2868731 0.5610938 0.2899665 0.5492355 0.2961741 0.5492355 0.7692161 0.3677161 0.7658103 0.379316 0.7589406 0.3792846
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0 0 0 6 0 1 2 0 2 2 1 3 14 1 4 3 1 5 7 2 6 28 2 7 5 2 8 1 3 9 7 3 10 5 3 11 3 4 12 26 4 13 2 4 14 2 5 15 12 5 16 13 5 17 13 6 18 22 6 19 14 6 20 13 7 21 20 7 22 21 7 23 0 8 24 8 8 25 10 8 26 4 9 27 9 9 28 5 9 29 6 10 30 11 10 31 12 10 32 1 11 33 9 11 34 8 11 35 0 12 36 15 12 37 4 12 38 3 13 39 11 13 40 7 13 41 18 14 42 43 14 43 23 14 44 17 15 45 36 15 46 16 15 47 10 16 48 16 16 49 18 16 50 14 17 51 19 17 52 11 17 53 15 18 54 17 18 55 9 18 56 12 19 57 19 19 58 20 19 59 8 20 60 17 20 61 16 20 62 10 21 63 23 21 64 15 21 65 24 22 66 27 22 67 25 22 68 0 23 69 25 23 70 1 23 71 1 24 72 27 24 73 3 24 74 0 25 75 26 25 76 24 25 77 31 26 78 34 26 79 30 26 80 4 27 81 30 27 82 6 27 83 4 28 84 28 28 85 31 28 86 6 29 87 29 29 88 7 29 89 34 30 90 32 30 91 33 30 92 30 31 93 33 31 94 29 31 95 31 32 96 32 32 97 35 32 98 29 33 99 32 33 100 28 33 101 41 34 102 39 34 103 42 34 104 43 35 105 36 35 106 37 35 107 20 14 108 41 14 109 21 14 110 21 22 111 42 22 112 22 22 113 16 22 114 38 22 115 18 22 116 22 15 117 39 15 118 19 15 119 37 35 120 50 35 121 43 35 122 39 15 123 44 15 124 19 15 125 51 36 126 55 36 127 59 36 128 49 37 129 53 37 130 57 37 131 40 34 132 48 34 133 39 34 134 43 14 135 46 14 136 23 14 137 20 14 138 49 14 139 40 14 140 17 15 141 51 15 142 37 15 143 23 34 144 47 34 145 17 34 146 19 35 147 45 35 148 20 35 149 59 38 150 66 38 151 58 38 152 58 39 153 62 39 154 54 39 155 49 40 156 56 40 157 48 40 158 45 41 159 52 41 160 53 41 161 48 42 162 52 42 163 44 42 164 50 43 165 54 43 166 46 43 167 50 44 168 59 44 169 58 44 170 46 45 171 55 45 172 47 45 173 62 30 174 67 30 175 63 30 176 60 30 177 65 30 178 61 30 179 54 46 180 63 46 181 55 46 182 53 39 183 65 39 184 57 39 185 55 47 186 67 47 187 59 47 188 57 46 189 64 46 190 56 46 191 52 38 192 61 38 193 53 38 194 56 47 195 60 47 196 52 47 197 0 48 198 4 48 199 6 48 200 2 49 201 13 49 202 14 49 203 7 50 204 29 50 205 28 50 206 1 51 207 3 51 208 7 51 209 3 52 210 27 52 211 26 52 212 2 53 213 6 53 214 12 53 215 13 54 216 21 54 217 22 54 218 13 55 219 12 55 220 20 55 221 0 56 222 1 56 223 8 56 224 4 57 225 15 57 226 9 57 227 6 58 228 7 58 229 11 58 230 1 59 231 5 59 232 9 59 233 0 60 234 10 60 235 15 60 236 3 61 237 14 61 238 11 61 239 18 14 240 38 14 241 43 14 242 17 15 243 37 15 244 36 15 245 10 62 246 8 62 247 16 62 248 14 63 249 22 63 250 19 63 251 15 64 252 23 64 253 17 64 254 12 65 255 11 65 256 19 65 257 8 66 258 9 66 259 17 66 260 10 67 261 18 67 262 23 67 263 24 22 264 26 22 265 27 22 266 0 68 267 24 68 268 25 68 269 1 69 270 25 69 271 27 69 272 0 70 273 2 70 274 26 70 275 31 71 276 35 71 277 34 71 278 4 72 279 31 72 280 30 72 281 4 73 282 5 73 283 28 73 284 6 74 285 30 74 286 29 74 287 34 30 288 35 30 289 32 30 290 30 75 291 34 75 292 33 75 293 31 76 294 28 76 295 32 76 296 29 77 297 33 77 298 32 77 299 41 34 300 40 34 301 39 34 302 43 35 303 38 35 304 36 35 305 20 14 306 40 14 307 41 14 308 21 22 309 41 22 310 42 22 311 16 22 312 36 22 313 38 22 314 22 15 315 42 15 316 39 15 317 37 35 318 51 35 319 50 35 320 39 15 321 48 15 322 44 15 323 51 42 324 47 42 325 55 42 326 49 43 327 45 43 328 53 43 329 40 34 330 49 34 331 48 34 332 43 14 333 50 14 334 46 14 335 20 14 336 45 14 337 49 14 338 17 15 339 47 15 340 51 15 341 23 34 342 46 34 343 47 34 344 19 35 345 44 35 346 45 35 347 59 78 348 67 78 349 66 78 350 58 79 351 66 79 352 62 79 353 49 80 354 57 80 355 56 80 356 45 81 357 44 81 358 52 81 359 48 36 360 56 36 361 52 36 362 50 37 363 58 37 364 54 37 365 50 82 366 51 82 367 59 82 368 46 83 369 54 83 370 55 83 371 62 30 372 66 30 373 67 30 374 60 30 375 64 30 376 65 30 377 54 84 378 62 84 379 63 84 380 53 79 381 61 79 382 65 79 383 55 85 384 63 85 385 67 85 386 57 84 387 65 84 388 64 84 389 52 78 390 60 78 391 61 78 392 56 85 393 64 85 394 60 85 395
+
+
+
+
+
+
+
+ 0.6859207 -0.3240135 0.6515582 7.358891 0.7276763 0.3054208 -0.6141704 -6.925791 0 0.8953956 0.4452714 4.958309 0 0 0 1
+
+
+
+ -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1
+
+
+
+ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/spaceship.mtl b/aswebglue/examples/spaceship.mtl
new file mode 100644
index 0000000..171bfcd
--- /dev/null
+++ b/aswebglue/examples/spaceship.mtl
@@ -0,0 +1,13 @@
+# Blender MTL File: 'spaceship.blend'
+# Material Count: 1
+
+newmtl Material
+Ns 323.999994
+Ka 1.000000 1.000000 1.000000
+Kd 0.800000 0.800000 0.800000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
+map_Kd spaceship_uv.psd
diff --git a/aswebglue/examples/spaceship.obj b/aswebglue/examples/spaceship.obj
new file mode 100644
index 0000000..c9325bc
--- /dev/null
+++ b/aswebglue/examples/spaceship.obj
@@ -0,0 +1,432 @@
+# Blender v2.90.1 OBJ File: 'spaceship.blend'
+# www.blender.org
+mtllib spaceship.mtl
+o SpaceShip_Cube
+v -0.050800 -0.042935 0.032930
+v -0.050800 0.042935 0.019082
+v -0.050800 -0.042935 -0.042935
+v -0.050800 0.042935 -0.023071
+v 0.247451 -0.022926 0.032930
+v 0.247451 0.022926 0.023071
+v 0.247451 -0.022926 -0.032930
+v 0.247451 0.022926 -0.023071
+v -0.042935 -0.007477 0.050532
+v 0.223038 -0.007477 0.050532
+v -0.042935 -0.030576 0.050532
+v 0.223038 -0.007477 -0.050532
+v 0.223038 -0.030576 -0.050532
+v -0.042935 -0.030576 -0.050532
+v -0.042935 -0.007477 -0.050532
+v 0.223038 -0.030576 0.050532
+v -0.108820 -0.078745 0.224275
+v 0.049143 -0.078745 0.224275
+v -0.108820 -0.083764 0.224275
+v 0.049143 -0.078745 -0.224275
+v 0.049143 -0.083764 -0.224275
+v -0.108820 -0.083764 -0.224275
+v -0.108820 -0.078745 -0.224275
+v 0.049143 -0.083764 0.224275
+v -0.089841 -0.008713 0.030597
+v -0.089841 0.008713 0.030597
+v -0.089841 -0.008713 -0.030597
+v -0.089841 0.008713 -0.030597
+v 0.298773 0.011864 0.022926
+v 0.298773 0.011864 -0.022926
+v 0.298773 -0.018683 -0.022926
+v 0.298773 -0.018683 0.022926
+v 0.328190 -0.004551 0.011885
+v 0.328190 -0.004551 -0.011885
+v 0.328190 -0.014516 -0.011885
+v 0.328190 -0.014516 0.011885
+v -0.108820 -0.078745 0.229831
+v 0.049143 -0.078745 0.229831
+v -0.108820 -0.083764 0.229831
+v 0.049143 -0.078745 -0.229831
+v 0.049143 -0.083764 -0.229831
+v -0.108820 -0.083764 -0.229831
+v -0.108820 -0.078745 -0.229831
+v 0.049143 -0.083764 0.229831
+v 0.199522 -0.078745 -0.224275
+v 0.199522 -0.083764 -0.224275
+v 0.199522 -0.083764 0.224275
+v 0.199522 -0.078745 0.224275
+v 0.199522 -0.078745 -0.229831
+v 0.199522 -0.083764 -0.229831
+v 0.199522 -0.083764 0.229831
+v 0.199522 -0.078745 0.229831
+v 0.204048 -0.076236 -0.221498
+v 0.204048 -0.086274 -0.221498
+v 0.204048 -0.086274 0.221498
+v 0.204048 -0.076236 0.221498
+v 0.204048 -0.076236 -0.232609
+v 0.204048 -0.086274 -0.232609
+v 0.204048 -0.086274 0.232609
+v 0.204048 -0.076236 0.232609
+v 0.213703 -0.078745 -0.224275
+v 0.213703 -0.083764 -0.224275
+v 0.213703 -0.083764 0.224275
+v 0.213703 -0.078745 0.224275
+v 0.213703 -0.078745 -0.229831
+v 0.213703 -0.083764 -0.229831
+v 0.213703 -0.083764 0.229831
+v 0.213703 -0.078745 0.229831
+vt 0.468824 0.313296
+vt 0.099856 0.235435
+vt 0.468824 0.223730
+vt 0.769216 0.222017
+vt 0.811329 0.236291
+vt 0.849311 0.292540
+vt 0.988374 0.777047
+vt 0.931838 0.838552
+vt 0.931314 0.777047
+vt 0.936581 0.424216
+vt 0.274456 0.549235
+vt 0.226131 0.610752
+vt 0.226081 0.590190
+vt 0.130004 0.214692
+vt 0.459198 0.214701
+vt 0.786521 0.222736
+vt 0.845920 0.008576
+vt 0.344764 0.009831
+vt 0.540275 0.009837
+vt 0.069160 0.615883
+vt 0.118616 0.612715
+vt 0.094213 0.626925
+vt 0.867099 0.723584
+vt 0.882852 0.689098
+vt 0.924327 0.722185
+vt 0.012170 0.643373
+vt 0.028512 0.673086
+vt 0.000000 0.671272
+vt 0.924327 0.381859
+vt 0.860601 0.386231
+vt 0.130004 0.334007
+vt 0.099856 0.313190
+vt 0.069160 1.000000
+vt 0.069160 0.647117
+vt 0.540275 0.539396
+vt 0.344764 0.545949
+vt 0.344764 0.539391
+vt 0.753235 0.576329
+vt 0.761907 0.762006
+vt 0.755038 0.762091
+vt 0.147507 0.821091
+vt 0.142205 0.824179
+vt 0.543083 0.069077
+vt 0.760678 0.185764
+vt 0.540275 0.381859
+vt 0.854374 0.691278
+vt 0.768095 0.446190
+vt 0.151047 0.559585
+vt 0.177499 0.770946
+vt 0.171752 0.773194
+vt 0.543310 0.694640
+vt 0.459198 0.334016
+vt 0.320856 0.549235
+vt 0.299288 0.620796
+vt 0.299288 0.549261
+vt 0.226081 0.549235
+vt 0.178382 0.612135
+vt 0.177499 0.591594
+vt 1.000000 0.381859
+vt 0.988708 0.424216
+vt 0.517446 0.238132
+vt 0.517446 0.310378
+vt 0.036373 0.301356
+vt 0.000000 0.260237
+vt 0.036373 0.247224
+vt 0.914994 0.781713
+vt 0.877334 0.784597
+vt 0.059762 0.585798
+vt 0.333190 0.549235
+vt 0.320856 0.577299
+vt 0.320856 0.549235
+vt 0.022057 0.583399
+vt 0.042379 0.550018
+vt 0.898002 0.820040
+vt 0.885717 0.820981
+vt 0.988538 0.838552
+vt 0.946219 0.874854
+vt 0.858640 0.000000
+vt 0.852366 0.186483
+vt 0.852431 0.000000
+vt 0.866435 0.180323
+vt 0.874144 0.000000
+vt 0.872642 0.180310
+vt 0.540275 0.003278
+vt 0.840530 0.005631
+vt 0.849311 0.002945
+vt 0.145745 0.829726
+vt 0.762346 0.000000
+vt 0.767548 0.185795
+vt 0.865005 0.351976
+vt 0.759090 0.362608
+vt 0.758388 0.399400
+vt 0.748169 0.394465
+vt 0.761907 0.394294
+vt 0.158641 0.003267
+vt 0.153017 0.013117
+vt 0.153017 0.000000
+vt 0.858575 0.186483
+vt 0.852304 0.364013
+vt 0.158641 0.539386
+vt 0.344764 0.003273
+vt 0.760105 0.576243
+vt 0.283719 0.549236
+vt 0.277448 0.726765
+vt 0.277510 0.549235
+vt 0.287971 0.737071
+vt 0.296002 0.565422
+vt 0.294178 0.737071
+vt 0.861729 0.356311
+vt 0.871078 0.368150
+vt 0.864870 0.368163
+vt 0.153017 0.549235
+vt 0.141089 0.539385
+vt 0.153017 0.536118
+vt 0.858512 0.364013
+vt 0.849311 0.369389
+vt 0.286873 0.561094
+vt 0.299288 0.561094
+vt 0.765960 0.362639
+vt 0.755477 0.367653
+vt 0.158641 0.545944
+vt 0.874144 0.356285
+vt 0.283657 0.726765
+vt 0.274456 0.732141
+vt 0.345614 0.549235
+vt 0.339402 0.555794
+vt 0.339402 0.549235
+vt 0.333190 0.555794
+vt 0.339402 0.549235
+vt 0.339402 0.555794
+vt 0.286873 0.732141
+vt 0.277442 0.743506
+vt 0.141089 0.003267
+vt 0.758227 0.382724
+vt 0.858507 0.380754
+vt 0.852298 0.380754
+vt 0.296174 0.549235
+vt 0.769216 0.367716
+vt 0.758941 0.379285
+vt 0.274456 0.651335
+vt 0.151047 0.549235
+vt 0.006488 0.986377
+vt 0.540275 0.545955
+vt 0.761907 0.446664
+vt 0.177499 0.549235
+vt 0.540275 0.381859
+vt 0.320856 0.620771
+vt 0.226081 0.651231
+vt 0.924327 0.381859
+vt 0.000000 0.288300
+vt 0.333190 0.577299
+vt 0.030080 0.549235
+vt 0.975613 0.874854
+vt 0.867936 0.000013
+vt 0.843921 0.000000
+vt 0.151047 0.826638
+vt 0.769216 0.000031
+vt 0.871213 0.351963
+vt 0.751519 0.399485
+vt 0.158641 0.009826
+vt 0.289795 0.565422
+vt 0.141089 0.545944
+vt 0.861729 0.369389
+vt 0.345614 0.555794
+vt 0.333190 0.549235
+vt 0.283651 0.743506
+vt 0.141089 0.009826
+vt 0.751357 0.382809
+vt 0.289967 0.549236
+vt 0.765810 0.379316
+vn -0.0669 0.9978 0.0000
+vn 0.8905 -0.1025 0.4433
+vn -0.2107 -0.9776 0.0000
+vn -0.0669 -0.9978 0.0000
+vn 0.3013 0.0000 0.9535
+vn 0.0000 0.5237 0.8519
+vn 0.9350 0.0000 -0.3546
+vn 0.0000 0.9562 -0.2927
+vn 0.9130 0.0000 -0.4080
+vn -0.6423 -0.1611 -0.7494
+vn -0.5848 0.0000 0.8111
+vn 0.0000 -0.5293 -0.8484
+vn -0.0634 0.9444 0.3226
+vn -0.0436 -0.6501 0.7586
+vn 0.0000 1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 0.9350 0.0000 0.3546
+vn 0.0000 -0.9252 0.3795
+vn -0.7068 0.0000 -0.7074
+vn -0.7068 0.0000 0.7074
+vn 0.0000 -0.9252 -0.3795
+vn 0.0000 0.9562 0.2927
+vn 1.0000 0.0000 0.0000
+vn -0.2829 0.0000 -0.9592
+vn 0.6592 -0.7520 0.0000
+vn 0.6592 0.7520 0.0000
+vn -0.1403 0.9901 0.0000
+vn -0.0824 0.9966 0.0000
+vn -0.1913 0.0000 -0.9815
+vn -0.0480 -0.2100 0.9765
+vn -1.0000 0.0000 0.0000
+vn -0.3514 0.0000 0.9362
+vn -0.3514 0.0000 -0.9362
+vn -0.4873 -0.8732 0.0000
+vn 0.0000 0.0000 1.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.4849 -0.8746 0.0000
+vn 0.4849 0.8746 0.0000
+vn -0.2765 0.0000 -0.9610
+vn -0.2516 0.9678 0.0000
+vn 0.5231 0.0000 0.8523
+vn 0.5231 0.0000 -0.8523
+vn -0.2765 0.0000 0.9610
+vn -0.2516 -0.9678 0.0000
+vn 0.6947 0.0000 0.7193
+vn 0.0097 -0.2254 0.9742
+vn -0.0518 0.9401 -0.3368
+vn 0.9463 -0.0515 -0.3192
+vn -0.5848 0.0000 -0.8111
+vn -0.6423 -0.1611 0.7494
+vn -0.0338 -0.6548 -0.7550
+vn 0.0000 0.8184 -0.5746
+vn 0.0000 -0.4784 0.8782
+vn -0.0803 -0.1587 -0.9841
+vn -0.0480 -0.2100 -0.9765
+vn -0.1913 0.0000 0.9815
+usemtl Material
+s off
+f 1/1/1 7/2/1 3/3/1
+f 3/4/2 15/5/2 4/6/2
+f 8/7/3 29/8/3 6/9/3
+f 2/10/4 8/7/4 6/9/4
+f 3/11/5 28/12/5 27/13/5
+f 3/3/6 13/14/6 14/15/6
+f 14/16/7 23/17/7 15/5/7
+f 14/15/8 21/18/8 22/19/8
+f 1/20/9 9/21/9 11/22/9
+f 5/23/10 10/24/10 6/25/10
+f 7/26/11 12/27/11 13/28/11
+f 2/29/12 10/24/12 9/30/12
+f 1/1/13 16/31/13 5/32/13
+f 4/33/14 12/27/14 8/34/14
+f 19/35/15 44/36/15 24/37/15
+f 18/38/16 37/39/16 17/40/16
+f 11/22/17 17/41/17 19/42/17
+f 15/43/18 20/44/18 12/45/18
+f 16/46/19 18/47/19 10/24/19
+f 13/48/20 20/49/20 21/50/20
+f 9/51/21 18/38/21 17/40/21
+f 11/52/22 24/37/22 16/31/22
+f 25/53/23 28/54/23 26/55/23
+f 2/56/24 25/57/24 26/58/24
+f 2/10/25 28/59/25 4/60/25
+f 1/1/26 27/61/26 25/62/26
+f 32/63/27 35/64/27 31/65/27
+f 7/2/28 32/63/28 31/65/28
+f 5/23/29 29/66/29 32/67/29
+f 7/26/30 30/68/30 8/34/30
+f 35/69/31 33/70/31 34/71/31
+f 31/72/32 34/73/32 30/68/32
+f 32/67/33 33/74/33 36/75/33
+f 30/76/34 33/77/34 29/8/34
+f 42/78/35 40/79/35 43/80/35
+f 44/81/36 37/82/36 38/83/36
+f 21/18/15 42/84/15 22/19/15
+f 22/85/23 43/86/23 23/17/23
+f 17/41/23 39/87/23 19/42/23
+f 23/88/16 40/89/16 20/44/16
+f 38/83/36 51/90/36 44/81/36
+f 40/89/16 45/91/16 20/44/16
+f 52/92/37 56/93/37 60/94/37
+f 50/95/38 54/96/38 58/97/38
+f 41/98/35 49/99/35 40/79/35
+f 44/36/15 47/100/15 24/37/15
+f 21/18/15 50/95/15 41/101/15
+f 18/38/16 52/92/16 38/102/16
+f 24/103/35 48/104/35 18/105/35
+f 20/106/36 46/107/36 21/108/36
+f 59/109/39 68/110/39 67/111/39
+f 59/112/40 63/113/40 55/114/40
+f 50/115/41 57/116/41 49/99/41
+f 46/107/42 53/117/42 54/118/42
+f 49/119/37 53/120/37 45/91/37
+f 51/121/38 55/114/38 47/100/38
+f 51/90/42 60/122/42 59/109/42
+f 47/123/41 56/124/41 48/104/41
+f 63/125/31 68/126/31 64/127/31
+f 61/128/31 66/129/31 62/130/31
+f 55/131/43 64/132/43 56/124/43
+f 54/96/40 66/133/40 58/97/40
+f 56/93/44 68/134/44 60/94/44
+f 57/116/43 66/135/43 65/136/43
+f 53/117/39 62/137/39 54/118/39
+f 57/138/44 61/139/44 53/120/44
+f 1/1/1 5/32/1 7/2/1
+f 3/4/45 14/16/45 15/5/45
+f 8/7/3 30/76/3 29/8/3
+f 2/10/4 4/60/4 8/7/4
+f 3/11/46 4/140/46 28/12/46
+f 3/3/47 7/2/47 13/14/47
+f 14/16/7 22/85/7 23/17/7
+f 14/15/8 13/14/8 21/18/8
+f 1/20/48 2/141/48 9/21/48
+f 5/23/49 16/46/49 10/24/49
+f 7/26/50 8/34/50 12/27/50
+f 2/29/51 6/25/51 10/24/51
+f 1/1/52 11/52/52 16/31/52
+f 4/33/53 15/142/53 12/27/53
+f 19/35/15 39/143/15 44/36/15
+f 18/38/16 38/102/16 37/39/16
+f 11/22/17 9/21/17 17/41/17
+f 15/43/18 23/88/18 20/44/18
+f 16/46/19 24/144/19 18/47/19
+f 13/48/20 12/145/20 20/49/20
+f 9/51/21 10/146/21 18/38/21
+f 11/52/22 19/35/22 24/37/22
+f 25/53/23 27/147/23 28/54/23
+f 2/56/54 1/148/54 25/57/54
+f 2/10/25 26/149/25 28/59/25
+f 1/1/26 3/3/26 27/61/26
+f 32/63/27 36/150/27 35/64/27
+f 7/2/28 5/32/28 32/63/28
+f 5/23/55 6/25/55 29/66/55
+f 7/26/56 31/72/56 30/68/56
+f 35/69/31 36/151/31 33/70/31
+f 31/72/32 35/152/32 34/73/32
+f 32/67/33 29/66/33 33/74/33
+f 30/76/34 34/153/34 33/77/34
+f 42/78/35 41/98/35 40/79/35
+f 44/81/36 39/154/36 37/82/36
+f 21/18/15 41/101/15 42/84/15
+f 22/85/23 42/155/23 43/86/23
+f 17/41/23 37/156/23 39/87/23
+f 23/88/16 43/157/16 40/89/16
+f 38/83/36 52/158/36 51/90/36
+f 40/89/16 49/119/16 45/91/16
+f 52/92/37 48/159/37 56/93/37
+f 50/95/38 46/160/38 54/96/38
+f 41/98/35 50/115/35 49/99/35
+f 44/36/15 51/121/15 47/100/15
+f 21/18/15 46/160/15 50/95/15
+f 18/38/16 48/159/16 52/92/16
+f 24/103/35 47/123/35 48/104/35
+f 20/106/36 45/161/36 46/107/36
+f 59/109/39 60/122/39 68/110/39
+f 59/112/40 67/162/40 63/113/40
+f 50/115/41 58/163/41 57/116/41
+f 46/107/42 45/161/42 53/117/42
+f 49/119/37 57/138/37 53/120/37
+f 51/121/38 59/112/38 55/114/38
+f 51/90/42 52/158/42 60/122/42
+f 47/123/41 55/131/41 56/124/41
+f 63/125/31 67/164/31 68/126/31
+f 61/128/31 65/165/31 66/129/31
+f 55/131/43 63/166/43 64/132/43
+f 54/96/40 62/167/40 66/133/40
+f 56/93/44 64/168/44 68/134/44
+f 57/116/43 58/163/43 66/135/43
+f 53/117/39 61/169/39 62/137/39
+f 57/138/44 65/170/44 61/139/44
diff --git a/aswebglue/examples/spaceship.x3d b/aswebglue/examples/spaceship.x3d
new file mode 100644
index 0000000..c3c23e0
--- /dev/null
+++ b/aswebglue/examples/spaceship.x3d
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aswebglue/examples/spaceship_uv.jpg b/aswebglue/examples/spaceship_uv.jpg
new file mode 100644
index 0000000..4ca04d5
Binary files /dev/null and b/aswebglue/examples/spaceship_uv.jpg differ
diff --git a/aswebglue/examples/spaceship_uv.png b/aswebglue/examples/spaceship_uv.png
new file mode 100644
index 0000000..c9e92b1
Binary files /dev/null and b/aswebglue/examples/spaceship_uv.png differ
diff --git a/aswebglue/examples/spaceship_uv.psd b/aswebglue/examples/spaceship_uv.psd
new file mode 100644
index 0000000..7d6d426
Binary files /dev/null and b/aswebglue/examples/spaceship_uv.psd differ
diff --git a/aswebglue/performance-test/Readme.md b/aswebglue/performance-test/Readme.md
new file mode 100644
index 0000000..bf0d780
--- /dev/null
+++ b/aswebglue/performance-test/Readme.md
@@ -0,0 +1,22 @@
+# Performance tests
+
+I made this folder to test some performance hyptheses.
+
+## objTest.ts
+
+This test was based on a conversation I had with @decode on the AssemblyScript Discord:
+https://discord.gg/mNPWbVT4
+
+The calls to the WebGLContext object require a `global.get` and `load` Wasm call, where
+using the direct calls only need a `global.get` call. @decode believed that this would
+be a negligible performance cost, and as always, he was correct. When I wrote this test
+I had the following outout:
+```
+============ FASTEST ============
+#1 Direct call test 177 exec/sec
+#2 Object inline test 161 exec/sec
+#3 Object call test 161 exec/sec
+============ SLOWEST ============
+```
+Each exec is really 1 Million calls. When you disassemble the code to WAT, the difference
+is the single load call. There is a performance difference, but it is quite small.
\ No newline at end of file
diff --git a/aswebglue/performance-test/objTest.js b/aswebglue/performance-test/objTest.js
new file mode 100644
index 0000000..c62f90b
--- /dev/null
+++ b/aswebglue/performance-test/objTest.js
@@ -0,0 +1,94 @@
+// import benchmark.js
+var Benchmark = require('benchmark');
+var suite = new Benchmark.Suite();
+
+// use fs to read the pow2_test.wasm module into a byte array
+const fs = require('fs');
+const bytes = fs.readFileSync('./objTest.wasm');
+const colors = require('colors'); // allow console logs with color
+
+// Variables for the WebAssembly functions
+var inline_object_test;
+var call_object_test;
+var direct_test;
+
+console.log(`
+================= RUNNING BENCHMARK =================
+`.rainbow);
+
+function init_benchmark() {
+ // adds the callbacks for the benchmarks
+ suite.add('#1 '.yellow + 'Direct call test', direct_test);
+ suite.add('#2 '.yellow + 'Object inline test', inline_object_test);
+ suite.add('#3 '.yellow + 'Object call test', call_object_test);
+ // add listeners
+ suite.on('cycle', function (event) {
+ console.log(String(event.target));
+ });
+
+ suite.on('complete', function () {
+ // when the benchmark has finished, log the fastest and slowest functions
+ let fast_string = ('Fastest is ' +
+ this.filter('fastest').map('name'));
+ let slow_string = ('Slowest is ' +
+ this.filter('slowest').map('name'));
+ console.log(`
+ ------------------------------------------------------------
+ ${fast_string.green}
+ ${slow_string.red}
+ ------------------------------------------------------------
+ `);
+
+ // create an array of all successful runs and sort fast to slow
+ var arr = this.filter('successful');
+ arr.sort(function (a, b) {
+ return a.stats.mean - b.stats.mean;
+ });
+
+ console.log(`
+
+ `);
+ console.log("============ FASTEST ============".green);
+ while (obj = arr.shift()) {
+ let extension = '';
+ let count = Math.ceil(1 / obj.stats.mean);
+
+ if (count > 1000) {
+ count /= 1000;
+ extension = 'K'.green.bold;
+ }
+
+ if (count > 1000) {
+ count /= 1000;
+ extension = 'M'.green.bold;
+ }
+
+ count = Math.ceil(count);
+ let count_string = count.toString().yellow + extension;
+ console.log(
+ `${obj.name.padEnd(45, ' ')} ${count_string} exec/sec`
+ );
+ }
+ console.log("============ SLOWEST ============".red);
+ });
+ // run async
+ suite.run({ 'async': false });
+}
+var importObject = {
+ objTest: {
+ passInt: (i) => {
+ }
+ },
+ env: {
+ abort: () => { },
+ }
+};
+
+(async () => {
+ const obj = await WebAssembly.instantiate(new Uint8Array(bytes), importObject);
+
+ inline_object_test = obj.instance.exports.inline_object_test;
+ call_object_test = obj.instance.exports.call_object_test;
+ direct_test = obj.instance.exports.direct_test;
+ init_benchmark();
+})();
diff --git a/aswebglue/performance-test/objTest.ts b/aswebglue/performance-test/objTest.ts
new file mode 100644
index 0000000..259100c
--- /dev/null
+++ b/aswebglue/performance-test/objTest.ts
@@ -0,0 +1,56 @@
+/*
+This test was based on a conversation I had with @decode on the AssemblyScript Discord:
+https://discord.gg/mNPWbVT4
+
+The calls to the WebGLContext object require a global.get and load Wasm call, where
+using the direct calls only need a global.get call. @decode believed that this would
+be a negligible performance cost, and as always, he was correct. When I wrote this test
+I had the following outout:
+
+============ FASTEST ============
+#1 Direct call test 177 exec/sec
+#2 Object inline test 161 exec/sec
+#3 Object call test 161 exec/sec
+============ SLOWEST ============
+
+Each exec is really 1 Million calls. When you disassemble the code to WAT, the difference
+is the single load call. There is a performance difference, but it is quite small.
+*/
+export declare function passInt(i: i32): void;
+@final @unmanaged
+class ObjTest {
+ obj_id: i32 = 1;
+ @inline constructor(obj_id: i32) {
+ this.obj_id = obj_id;
+ }
+
+ @inline inlinePassInt(): void {
+ passInt(this.obj_id);
+ }
+
+ callPassInt(): void {
+ passInt(this.obj_id);
+ }
+
+}
+var obj = new ObjTest(123);
+
+export function inline_object_test(): void {
+ for (var i: i32 = 0; i < 1_000_000; i++) {
+ obj.inlinePassInt();
+ }
+}
+
+export function call_object_test(): void {
+ for (var i: i32 = 0; i < 1_000_000; i++) {
+ obj.callPassInt();
+ }
+}
+
+const id: i32 = 123;
+
+export function direct_test(): void {
+ for (var i: i32 = 0; i < 1_000_000; i++) {
+ passInt(id);
+ }
+}
diff --git a/example/.nojekyll b/example/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/example/assembly/HelloFrom.ts b/example/assembly/HelloFrom.ts
new file mode 100644
index 0000000..132dcac
--- /dev/null
+++ b/example/assembly/HelloFrom.ts
@@ -0,0 +1,82 @@
+// Export AssemblyScript-side glue code or not everything will work (for example the customElements API).
+
+import {customElements, Element, HTMLElement} from '../node_modules/asdom/assembly/index'
+
+// Define a class for our custom element.
+export class HelloFrom extends HTMLElement {
+ static observedAttributes: string[] = ['place', 'avatar']
+
+ private static readonly __placeDefault: string = 'AssemblyScript'
+ private __place: string = HelloFrom.__placeDefault
+ private __placeRef: HTMLElement | null = null
+
+ get place(): string {
+ return this.__place
+ }
+
+ set place(value: string) {
+ this.__place = value
+ if (this.__placeRef) this.__placeRef!.innerText = value
+ }
+
+ private static readonly __avatarDefault: string = 'https://www.assemblyscript.org/images/icon.svg'
+ private __avatar: string = HelloFrom.__avatarDefault
+ private __avatarRef: HTMLElement | null = null
+
+ get avatar(): string {
+ return this.__avatar
+ }
+
+ set avatar(value: string) {
+ this.__avatar = value
+ if (this.__avatarRef) this.__avatarRef!.setAttribute('src', value)
+ }
+
+ attributeChangedCallback(attr: string, oldVal: string | null, newVal: string | null): void {
+ if (attr == 'place') {
+ if (!newVal) this.place = HelloFrom.__placeDefault
+ else this.place = newVal!
+ } else if (attr == 'avatar') {
+ if (!newVal) this.avatar = HelloFrom.__avatarDefault
+ else this.avatar = newVal!
+ }
+ }
+
+ connectedCallback(): void {
+ let root = this.shadowRoot
+ if (!root) root = this.attachShadow({mode: 'open'})
+
+ root.innerHTML = this.template()
+
+ this.__placeRef = root.querySelector('[ref=placeRef]') as HTMLElement
+ this.__avatarRef = root.querySelector('[ref=avatarRef]') as HTMLElement
+ }
+
+ template(): string {
+ return /*html*/ `
+
+
+
+
+ Hello from ${this.place} !
+
+ `
+ }
+}
+
+// The customElements.define call has to be slightly different in
+// AssemblyScript because AS does not yet support constructor function
+// references.
+customElements.define('hello-from', () => new HelloFrom(), HelloFrom.observedAttributes)
diff --git a/example/assembly/SecondsCounter.ts b/example/assembly/SecondsCounter.ts
index c82d8f4..744688f 100644
--- a/example/assembly/SecondsCounter.ts
+++ b/example/assembly/SecondsCounter.ts
@@ -1,5 +1,5 @@
import {setInterval} from '../node_modules/ecmassembly/assembly/setInterval'
-import {HTMLElement} from '../node_modules/asdom/assembly/index'
+import {customElements, HTMLElement, ShadowRootInit} from '../node_modules/asdom/assembly/index'
import {log} from './imports'
let count: i32 = 0
@@ -7,9 +7,7 @@ const elements: SecondsCounter[] = []
setInterval(() => {
count++
- for (let i = 0, l = elements.length; i < l; i++) {
- elements[i].render()
- }
+ for (let i = 0, l = elements.length; i < l; i++) elements[i].update()
}, 1000)
export class SecondsCounter extends HTMLElement {
@@ -24,17 +22,14 @@ export class SecondsCounter extends HTMLElement {
connectedCallback(): void {
log('AS: connected')
-
- this.setAttribute('style', 'display: block')
-
elements.push(this)
-
- this.render()
+ if (!this.shadowRoot) this.attachShadow({mode: 'open'} as ShadowRootInit)
+ this.shadowRoot!.innerHTML = this.template()
+ this.countOutput = this.shadowRoot!.querySelector('strong') as HTMLElement
}
disconnectedCallback(): void {
log('AS: disconnected')
-
elements.splice(elements.indexOf(this), 1)
}
@@ -46,9 +41,27 @@ export class SecondsCounter extends HTMLElement {
}
}
- render(): void {
- this.innerHTML = /*html*/ `
- I am a custom <seconds-counter> element. The seconds count is ${count} !
+ countOutput: HTMLElement | null = null
+
+ template(): string {
+ return /*html*/ `
+
+
+ I am a custom <seconds-counter> element. The seconds count is ${count} !
+ ${this.childNodes.length ? /*html*/ `Distributed content: ` : ''}
+
`
}
+
+ update(): void {
+ this.countOutput!.innerText = count.toString()
+ }
}
+
+// The customElements.define call has to be slightly different in
+// AssemblyScript because AS does not yet support constructor function
+// references.
+customElements.define('seconds-counter', () => new SecondsCounter(), SecondsCounter.observedAttributes)
diff --git a/example/assembly/imports.ts b/example/assembly/imports.ts
index 41edf66..ea906ce 100644
--- a/example/assembly/imports.ts
+++ b/example/assembly/imports.ts
@@ -1,3 +1,3 @@
// @ts-expect-error
-@external('asDOM_Node', 'log')
+@external('asDOM', 'log')
export declare function log(msg: string): void
diff --git a/example/assembly/index.ts b/example/assembly/index.ts
index 828f52d..3aad3a4 100644
--- a/example/assembly/index.ts
+++ b/example/assembly/index.ts
@@ -3,15 +3,28 @@ export * from '../node_modules/asdom/assembly/glue'
import {
document,
- customElements,
Audio,
Element,
HTMLDivElement,
HTMLTemplateElement,
- unbind,
Text,
HTMLElement,
HTMLImageElement,
+ Node,
+ HTMLHeadingElement,
+ HTMLSpanElement,
+ window,
+ EmptyHistoryState,
+ HTMLCanvasElement,
+ WebGLRenderingContext,
+ ANGLE_instanced_arrays,
+ GLenum,
+ WebGLShader,
+ WebGLProgram,
+ WebGLBuffer,
+ GLint,
+ WebGLUniformLocation,
+ GLfloat,
} from '../node_modules/asdom/assembly/index'
// TODO move these into asdom, because requestAnimationFrame is a DOM API.
@@ -19,7 +32,32 @@ import {cancelAnimationFrame, requestAnimationFrame} from '../node_modules/ecmas
import {setTimeout} from '../node_modules/ecmassembly/assembly/setTimeout'
import {log} from './imports'
-import {SecondsCounter} from './SecondsCounter'
+import './SecondsCounter'
+import './HelloFrom'
+
+log('History length: ' + window.history.length.toString())
+
+// setTimeout(() => {
+// window.history.pushState(new EmptyHistoryState(), '', '/foo')
+
+// setTimeout(() => {
+// window.history.pushState(new EmptyHistoryState(), '', '/bar')
+// }, 1000)
+// }, 1000)
+
+// To test these work, press the browser back and forward buttons after the
+// previous timeouts complete and have changed the URL.
+window.addEventListener('popstate', () => {
+ log('popstate 1')
+})
+window.onpopstate = () => {
+ log('popstate 2')
+}
+
+if (document.children.length != 1) throw new Error('document.children.length should be 1')
+if (document.children[0]!.tagName != 'HTML') throw new Error('document.children[0] should be ')
+if (document.firstElementChild!.tagName != 'HTML') throw new Error('document.firstElementChild should be ')
+if (document.lastElementChild!.tagName != 'HTML') throw new Error('document.lastElementChild should be ')
let imgRotation: f32 = 0
let img: HTMLImageElement
@@ -42,64 +80,133 @@ let text2: Text
let container: HTMLElement
-const style = document.createElement('div')
-
-style.innerHTML = /*html*/ `
-
+const style = document.createElement('style')
+
+style.innerHTML = /*css*/ `
+ body {
+ /* And there was 3D depth. */
+ perspective: 800px;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+ .hello span {
+ font-weight: normal;
+ }
+ .dot {
+ width: 20px; height: 20px;
+ border-radius: 100%;
+ background: deeppink;
+ position: absolute;
+ top: 25%; left: 50%;
+ }
+ .selected * {
+ background: #0fc;
+ }
`
document.body!.appendChild(style)
-const el = document.createElement('h1')
+const el = document.createElement('h1') as HTMLHeadingElement
el.setAttribute('class', 'hello')
-el.innerHTML = /*html*/ `
- hello from AssemblyScript
-`
-
+el.innerHTML = /*html*/ `hello from AssemblyScript `
document.body!.appendChild(el)
+log('h1 child node count: ' + el.childNodes.length.toString())
-img = document.createElement('img') as HTMLImageElement
+let item = el.childNodes.item(0)!.childNodes.item(2)!
+if (!(item instanceof HTMLElement && (item as HTMLElement).innerHTML == 'AssemblyScript'))
+ throw new Error('Expected different result from childNodes.item()')
-img.setAttribute('src', '../assets/image.png')
+item = el.childNodes[0]!.childNodes[2]!
+if (!(item instanceof HTMLElement && (item as HTMLElement).innerHTML == 'AssemblyScript'))
+ throw new Error('Expected different result from childNodes[]')
-// Animate the rotation of the logo.
-requestAnimationFrame(
- (logoRotationLoop = () => {
- img.setAttribute(
- 'style',
- 'border-radius: 20px; position: absolute; top: 25%; left: 50%; transform: translate(-50%, -50%) rotateY(' +
- (imgRotation++).toString() +
- 'deg)',
- )
+// TEST Node.lastChild / Node.previousSibling {{
- requestAnimationFrame(logoRotationLoop)
- }),
-)
+let i: i32 = 0
+
+// All these should work. Github issue: https://github.com/AssemblyScript/assemblyscript/issues/1973
+// for (let node: Node | null = el.childNodes[0]!.firstChild; node; node = node.nextSibling) i++ // COMPILE ERROR
+for (let node: Node | null = el.childNodes[0]!.firstChild; node; node = node!.nextSibling) i++ // OK
+// for (let node: Node | null = el.childNodes[0]!.firstChild; node!; node = node.nextSibling) i++ // COMPILE ERROR
+// for (let node: Node | null = el.childNodes[0]!.firstChild; node!; node = node!.nextSibling) i++ // RUNTIME ERROR
+// for (let node: Node | null = el.childNodes[0]!.firstChild; node != null; node = node.nextSibling) i++ // COMPILE ERROR
+// for (let node: Node | null = el.childNodes[0]!.firstChild; node != null; node = node!.nextSibling) i++ // OK
+//
+// These while-loop variants should all work the same too.
+// let node: Node | null = el.childNodes[0]!.firstChild
+// while (node) { node = node.nextSibling; i++ } // ERROR
+// while (node) { node = node!.nextSibling; i++ } // OK
+// while (node!) { node = node.nextSibling; i++ } // ERROR
+// while (node!) { node = node!.nextSibling; i++ } // ERROR
+// while (node != null) { node = node.nextSibling; i++ } // ERROR
+// while (node != null) { node = node!.nextSibling; i++ } // OK
+
+if (i != 3) throw new Error('Unexpected number of child nodes.')
+
+// }}
+
+// TEST Node.lastChild / Node.previousSibling {{
+
+i = 0
+for (let node: Node | null = el.childNodes[0]!.lastChild; node; node = node!.previousSibling) i++
+
+if (i != 3) throw new Error('Unexpected number of child nodes.')
+
+// }}
+
+// TEST Element.lastElementChild / Element.previousElementSibling {{
+
+i = 0
+for (let node: Element | null = el.children[0]!.firstElementChild; node; node = node!.nextElementSibling) i++
+
+if (i != 2) throw new Error('Unexpected number of child elements.')
+
+// }}
+
+// TEST Element.lastElementChild / Element.previousElementSibling {{
+
+i = 0
+for (let node: Element | null = el.children[0]!.lastElementChild; node; node = node!.previousElementSibling) i++
+
+if (i != 2) throw new Error('Unexpected number of child elements.')
+
+// }}
+
+// TEST querySelector / querySelectorAll {{
+{
+ const el2 = document.body!.querySelector('h1.hello')!
+ el2.setAttribute('class', 'hello selected')
+
+ let query = el.querySelectorAll('*')
+ if (query.length != 3) throw new Error('Wrong number of queried elements.')
+ if (!(query[0]! instanceof HTMLSpanElement)) throw new Error('Expected a span element.')
+ if (!(query[1]! instanceof HTMLElement && query[1]!.tagName == 'EM')) throw new Error('Expected an em element.')
+ if (!(query[2]! instanceof HTMLElement && query[2]!.tagName == 'STRONG'))
+ throw new Error('Expected a strong element.')
+ if (query[3] != null) throw new Error('There should be no more elements.')
-document.body!.appendChild(img)
+ let query2 = el.querySelectorAll('span > *')
+ if (query2.length != 2) throw new Error('Wrong number of queried elements.')
+ if (!(query2[0]! instanceof HTMLElement && query2[0]!.tagName == 'EM')) throw new Error('Expected an em element.')
+ if (!(query2[1]! instanceof HTMLElement && query2[1]!.tagName == 'STRONG'))
+ throw new Error('Expected a strong element.')
+ if (query2[2] != null) throw new Error('There should be no more elements.')
+
+ let query3 = el.querySelectorAll('.hellospan')
+ if (query3.length != 1) throw new Error('Wrong number of queried elements.')
+ if (!(query3[0]! instanceof HTMLSpanElement)) throw new Error('Expected a span element.')
+ if (query3[1] != null) throw new Error('There should be no more elements.')
+
+ let query4 = el.querySelectorAll('.nothing')
+ if (query4.length != 0) throw new Error('Wrong number of queried elements.')
+ if (query4[0] != null) throw new Error('There should be no more elements.')
+}
+// }}
document.body!.onclick = () => {
cancelAnimationFrame(explosionLoopFrame)
@@ -107,12 +214,7 @@ document.body!.onclick = () => {
dotScale = 1.0
for (let i = 0; i < dotsLength; i++) {
- if (!firstClick) {
- dots[i].remove()
-
- // Don't forget to unbind any element when done using it to avoid a memory leak!
- unbind(dots[i])
- }
+ if (!firstClick) dots[i].remove()
const dot = document.createElement('div') as HTMLDivElement
dots[i] = dot
@@ -149,9 +251,16 @@ document.body!.onclick = () => {
)
}
-const audio = new Audio('../assets/audio2.mp3')
+const clickHandler: () => void = () => {
+ log('body clicked!')
+}
+
+document.body!.addEventListener('click', clickHandler)
+
+const audio = new Audio('../assets/otherside - lena raine.ogg')
audio.autoplay = true
+log('audio autoplay: ' + audio.autoplay.toString())
const template = document.createElement('template') as HTMLTemplateElement
document.body!.appendChild(template)
@@ -172,48 +281,410 @@ document.body!.appendChild(cloned)
const text = document.createTextNode('This is a text node!')
-if (text.parentNode) throw new Error('There should not be a parent yet!')
+let textParentElement = text.parentElement
+if (textParentElement) throw new Error('There should not be a parent element yet!')
-document.body!.appendChild(text)
+let textParentNode = text.parentNode
+if (textParentNode) throw new Error('There should not be a parent node yet!')
-const br = document.createElement('br')
+const span1 = document.createElement('span')
+span1.setAttribute('class', 'span1')
+document.body!.appendChild(span1)
+span1.appendChild(text)
-text.parentNode!.appendChild(br)
+textParentElement = text.parentElement
+if (!textParentElement) throw new Error('There should be a parent element!')
-text2 = document.createTextNode('Another text node, appended using parentNode!')
-text.parentNode!.appendChild(text2)
+textParentNode = text.parentNode
+if (!textParentNode) throw new Error('There should be a parent node!')
+
+const br = document.createElement('br')
+
+text.parentElement!.appendChild(br)
log('Text node type should be true:')
log((text.nodeType == 3).toString())
-setTimeout(() => {
- document.body!.removeChild(text2)
-
- // When you no longer need an element, don't forget to call unbind on
- // it to avoid a memory leak.
- //
- // Although this is not needed in JS / TS, it is needed in AS.
- //
- // After unbinding, you should not use the unbound instances or else
- // things may not work as expected.
- unbind(text2)
-}, 1000)
+text2 = document.createTextNode('Another text node, appended using parentNode! ')
-customElements.define('seconds-counter', () => new SecondsCounter(), SecondsCounter.observedAttributes)
+const span2 = document.createElement('span')
+span2.setAttribute('class', 'span2')
+document.body!.appendChild(span2)
+;(span1.parentNode! as Element).querySelector('.span2')!.appendChild(text2)
+
+const removeButton = document.createElement('button')
+removeButton.innerText = 'Remove this line'
+span2.appendChild(removeButton)
+
+removeButton.onclick = () => {
+ document.body!.removeChild(span2)
+ document.body!.removeEventListener('click', clickHandler)
+}
container = document.createElement('div') as HTMLDivElement
container.innerHTML = /*html*/ `
-
+ Yes!
`
+
document.body!.appendChild(container)
log('--------------------')
setTimeout(() => {
- const el = container.firstChild as SecondsCounter
+ const el = container.firstElementChild!
// This causes the custom element's attributeChangedCallback to run,
// and it logs to the console.
el.setAttribute('some-attribute', 'bar')
}, 1000)
+
+const div = document.createElement('div')
+document.body!.appendChild(div)
+
+div.setAttribute('style', 'margin-top: 40px;')
+div.innerHTML = /*html*/ `
+
+
+
+
+
+`
+
+// You should normally not reach into an element's shadow DOM! But for sake of example...
+const hiFrom = document.querySelector('hello-from')!
+img = hiFrom.shadowRoot!.querySelector('img') as HTMLImageElement
+
+// Animate the rotation of the logo.
+requestAnimationFrame(
+ (logoRotationLoop = () => {
+ img.setAttribute('style', 'transform: rotateY(' + (imgRotation++).toString() + 'deg)')
+
+ requestAnimationFrame(logoRotationLoop)
+ }),
+)
+
+testGl()
+
+function testGl(): void {
+ const canvas = document.createElement('canvas') as HTMLCanvasElement
+ document.body!.appendChild(canvas)
+
+ // Get the WebGL rendering context.
+ var gl = canvas.getContext('webgl')
+
+ if (!gl) throw new Error('No WebGL')
+
+ const ext = gl.getExtension('ANGLE_instanced_arrays')
+
+ log('HOONIGANS ' + changetype(ext!).toString())
+
+ // Set the clear color to a vibrant pink.
+ gl.clearColor(255 / 255, 20 / 255, 147 / 255, 1.0)
+
+ // Clear the context with the newly set color. This is
+ // the function call that actually does the drawing.
+ gl.clear(gl.COLOR_BUFFER_BIT)
+
+ const buffers = initBuffers(gl)
+ log('buffer? ' + (buffers.position instanceof WebGLBuffer).toString())
+ log('buffer? ' + (buffers.color instanceof WebGLBuffer).toString())
+
+ // initShaderProgram(
+ // gl,
+ // /*glsl*/ `
+ // void main() {
+ // gl_Position = vec4(0, 0, 0, 1)
+ // }
+ // `,
+ // /*glsl*/ `
+ // void main() {
+ // gl_FragColor = vec4(0, 0, 0, 1)
+ // }
+ // `,
+ // )
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+webglExample()
+
+class AttribLocations {
+ vertexPosition: GLint
+ vertexColor: GLint
+}
+
+class UniformLocations {
+ projectionMatrix: WebGLUniformLocation
+ modelViewMatrix: WebGLUniformLocation
+}
+
+class ProgramInfo {
+ program: WebGLProgram
+ attribLocations: AttribLocations
+ uniformLocations: UniformLocations
+}
+
+// Based on https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_shaders_to_apply_color_in_WebGL
+function webglExample(): void {
+ const canvas = document.createElement('canvas') as HTMLCanvasElement
+ document.body!.appendChild(canvas)
+ const gl = canvas.getContext('webgl')!
+
+ // Vertex shader program
+
+ const vsSource = /*glsl*/ `
+ attribute vec4 aVertexPosition;
+ attribute vec4 aVertexColor;
+
+ uniform mat4 uModelViewMatrix;
+ uniform mat4 uProjectionMatrix;
+
+ varying lowp vec4 vColor;
+
+ void main(void) {
+ gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;
+ vColor = aVertexColor;
+ }
+ `
+
+ // Fragment shader program
+
+ const fsSource = /*glsl*/ `
+ varying lowp vec4 vColor;
+
+ void main(void) {
+ gl_FragColor = vColor;
+ }
+ `
+
+ // Initialize a shader program; this is where all the lighting
+ // for the vertices and so forth is established.
+ const shaderProgram = initShaderProgram(gl, vsSource, fsSource)
+
+ // Collect all the info needed to use the shader program.
+ // Look up which attributes our shader program is using
+ // for aVertexPosition, aVertexColor and also
+ // look up uniform locations.
+ const programInfo = {
+ program: shaderProgram,
+ attribLocations: {
+ vertexPosition: gl.getAttribLocation(shaderProgram, 'aVertexPosition'),
+ vertexColor: gl.getAttribLocation(shaderProgram, 'aVertexColor'),
+ } as AttribLocations,
+ uniformLocations: {
+ projectionMatrix: gl.getUniformLocation(shaderProgram, 'uProjectionMatrix'),
+ modelViewMatrix: gl.getUniformLocation(shaderProgram, 'uModelViewMatrix'),
+ } as UniformLocations,
+ } as ProgramInfo
+
+ // Here's where we call the routine that builds all the
+ // objects we'll be drawing.
+ const buffers = initBuffers(gl)
+
+ // Draw the scene
+ drawScene(gl, programInfo, buffers)
+}
+
+class Buffers {
+ position: WebGLBuffer
+ color: WebGLBuffer
+}
+
+function initBuffers(gl: WebGLRenderingContext): Buffers {
+ // Create a buffer for the square's positions.
+
+ const positionBuffer = gl.createBuffer()
+
+ // Select the positionBuffer as the one to apply buffer
+ // operations to from here out.
+
+ gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer)
+
+ // Now create an array of positions for the square.
+
+ // TODO use TypedArrays instead of StaticArray once this bug is fixed: https://github.com/AssemblyScript/assemblyscript/issues/2038 {{
+
+ // const _positions: Array = [1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0]
+ // const positions = new Float32Array(_positions.length)
+ // for (let i = 0, l = _positions.length; i < l; i++) positions[i] = _positions[i]
+ // gl.bufferData(gl.ARRAY_BUFFER, positions, gl.STATIC_DRAW)
+
+ // }} Using StaticArray for now: {{
+
+ const positions: StaticArray = [1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0]
+ gl.bufferData(gl.ARRAY_BUFFER, positions, gl.STATIC_DRAW)
+
+ // }}
+
+ // Now set up the colors for the vertices
+
+ // prettier-ignore
+ var _colors: StaticArray = [
+ 1.0, 1.0, 1.0, 1.0, // white
+ 1.0, 0.0, 0.0, 1.0, // red
+ 0.0, 1.0, 0.0, 1.0, // green
+ 0.0, 0.0, 1.0, 1.0, // blue
+ ]
+ // const colors = new Float32Array(_colors.length)
+ // for (let i = 0, l = _colors.length; i < l; i++) positions[i] = _colors[i]
+
+ const colorBuffer = gl.createBuffer()
+ gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer)
+ // gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW)
+ gl.bufferData(gl.ARRAY_BUFFER, _colors, gl.STATIC_DRAW)
+
+ return {
+ position: positionBuffer,
+ color: colorBuffer,
+ } as Buffers
+}
+
+function drawScene(gl: WebGLRenderingContext, programInfo: ProgramInfo, buffers: Buffers): void {
+ gl.clearColor(0.0, 0.0, 0.0, 1.0) // Clear to black, fully opaque
+ gl.clearDepth(1.0) // Clear everything
+ gl.enable(gl.DEPTH_TEST) // Enable depth testing
+ gl.depthFunc(gl.LEQUAL) // Near things obscure far things
+
+ // Clear the canvas before we start drawing on it.
+
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
+
+ // Create a perspective matrix, a special matrix that is
+ // used to simulate the distortion of perspective in a camera.
+ // Our field of view is 45 degrees, with a width/height
+ // ratio that matches the display size of the canvas
+ // and we only want to see objects between 0.1 units
+ // and 100 units away from the camera.
+
+ // prettier-ignore
+ const projectionMatrix: StaticArray = [
+ 1,0,0,0,
+ 0,1,0,0,
+ 0,0,1,0,
+ 0,0,0,1,
+ ]
+
+ // const fieldOfView: f32 = (45 * Math.PI) / 180 // in radians
+ // const aspect: f32 = gl.canvas.clientWidth / gl.canvas.clientHeight
+ // const zNear = 0.1
+ // const zFar = 100.0
+
+ // const projectionMatrix = mat4.create()
+
+ // // note: glmatrix.js always has the first argument
+ // // as the destination to receive the result.
+ // mat4.perspective(projectionMatrix, fieldOfView, aspect, zNear, zFar)
+
+ // prettier-ignore
+ const modelViewMatrix: StaticArray = [
+ 1,0,0,0,
+ 0,1,0,0,
+ 0,0,1,0,
+ 0,0,0,1,
+ ]
+
+ // // Set the drawing position to the "identity" point, which is
+ // // the center of the scene.
+ // const modelViewMatrix = mat4.create()
+
+ // // Now move the drawing position a bit to where we want to
+ // // start drawing the square.
+
+ // mat4.translate(
+ // modelViewMatrix, // destination matrix
+ // modelViewMatrix, // matrix to translate
+ // [-0.0, 0.0, -6.0],
+ // ) // amount to translate
+
+ // Tell WebGL how to pull out the positions from the position
+ // buffer into the vertexPosition attribute
+ {
+ const numComponents = 2
+ const type = gl.FLOAT
+ const normalize = false
+ const stride = 0
+ const offset = 0
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffers.position)
+ gl.vertexAttribPointer(
+ programInfo.attribLocations.vertexPosition,
+ numComponents,
+ type,
+ normalize,
+ stride,
+ offset,
+ )
+ gl.enableVertexAttribArray(programInfo.attribLocations.vertexPosition)
+ }
+
+ // Tell WebGL how to pull out the colors from the color buffer
+ // into the vertexColor attribute.
+ {
+ const numComponents = 4
+ const type = gl.FLOAT
+ const normalize = false
+ const stride = 0
+ const offset = 0
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffers.color)
+ gl.vertexAttribPointer(programInfo.attribLocations.vertexColor, numComponents, type, normalize, stride, offset)
+ gl.enableVertexAttribArray(programInfo.attribLocations.vertexColor)
+ }
+
+ // Tell WebGL to use our program when drawing
+
+ gl.useProgram(programInfo.program)
+
+ // Set the shader uniforms
+
+ gl.uniformMatrix4fv(programInfo.uniformLocations.projectionMatrix, false, projectionMatrix)
+ gl.uniformMatrix4fv(programInfo.uniformLocations.modelViewMatrix, false, modelViewMatrix)
+
+ {
+ const offset = 0
+ const vertexCount = 4
+ gl.drawArrays(gl.TRIANGLE_STRIP, offset, vertexCount)
+ }
+}
+
+function initShaderProgram(gl: WebGLRenderingContext, vsSource: string, fsSource: string): WebGLProgram {
+ const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource)
+ const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource)
+
+ // Create the shader program
+
+ const shaderProgram = gl.createProgram()
+ gl.attachShader(shaderProgram, vertexShader)
+ gl.attachShader(shaderProgram, fragmentShader)
+ gl.linkProgram(shaderProgram)
+
+ // If creating the shader program failed, alert
+
+ // if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
+ // alert('Unable to initialize the shader program: ' + gl.getProgramInfoLog(shaderProgram))
+ // return null
+ // }
+
+ return shaderProgram
+}
+
+function loadShader(gl: WebGLRenderingContext, type: GLenum, source: string): WebGLShader {
+ const shader = gl.createShader(type)
+
+ // Send the source to the shader object
+
+ gl.shaderSource(shader, source)
+
+ // Compile the shader program
+
+ gl.compileShader(shader)
+
+ // See if it compiled successfully
+
+ // if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
+ // // log('An error occurred compiling the shaders: ' + gl.getShaderInfoLog(shader))
+ // gl.deleteShader(shader)
+ // return null
+ // }
+
+ return shader
+}
diff --git a/example/assets/audio1.mp3 b/example/assets/audio1.mp3
deleted file mode 100644
index b2852d4..0000000
Binary files a/example/assets/audio1.mp3 and /dev/null differ
diff --git a/example/assets/audio2.mp3 b/example/assets/audio2.mp3
deleted file mode 100644
index b6e00cd..0000000
Binary files a/example/assets/audio2.mp3 and /dev/null differ
diff --git a/example/assets/otherside - lena raine.ogg b/example/assets/otherside - lena raine.ogg
new file mode 100644
index 0000000..079f3a4
Binary files /dev/null and b/example/assets/otherside - lena raine.ogg differ
diff --git a/example/index.html b/example/index.html
index 19f2d04..5dc3886 100644
--- a/example/index.html
+++ b/example/index.html
@@ -1,4 +1,4 @@
-
+Yeah!
diff --git a/example/package.json b/example/package.json
index e0678d1..36e8540 100644
--- a/example/package.json
+++ b/example/package.json
@@ -8,8 +8,8 @@
"test": "node tests"
},
"dependencies": {
- "@assemblyscript/loader": "^0.18.32",
- "asdom": "^0.1.12",
+ "@assemblyscript/loader": "^0.19.5",
+ "asdom": "lume/asdom",
"ecmassembly": "^0.1.8"
},
"devDependencies": {
diff --git a/glue/AsdomCustomElement.js b/glue/AsdomCustomElement.js
new file mode 100644
index 0000000..2dbc5ff
--- /dev/null
+++ b/glue/AsdomCustomElement.js
@@ -0,0 +1,93 @@
+// @ts-check
+
+/**
+ * @param {import('./index').Asdom} asdom
+ * @param {number} factory
+ * @param {number} attributes
+ */
+export function createAsdomCustomElementClass(asdom, factory, attributes) {
+ return class AsdomCustomElement extends HTMLElement {
+ __asRef = -1
+
+ static get observedAttributes() {
+ return asdom.stringArray(attributes)
+ }
+
+ __pinned = false
+
+ __pin() {
+ if (this.__pinned) return
+ this.__pinned = true
+ asdom.__pin(this.__asRef)
+ }
+
+ __unpin() {
+ if (!this.__pinned) return
+ this.__pinned = false
+ asdom.__unpin(this.__asRef)
+ }
+
+ constructor() {
+ super()
+
+ this.__asRef = asdom.fn(factory)()
+
+ // Because the element can be long lived while the AS
+ // user does not reference it (f.e. it is sitting in a
+ // DOM tree somewhere), we need to keep the AS-side
+ // object alive so the user's AS-side state will stay
+ // intact (otherwise the AS-side interface would be
+ // ephemeral and on each access of the JS-side
+ // element a new AS-side instance would be created
+ // with new AS-side state, destroying the AS user's
+ // logic). Non-custom elements don't have state on
+ // the AS-side, so their AS-side interfaces are
+ // ephemeral (created only when needed).
+ this.__pin()
+
+ asdom.__objectRefs.set(this.__asRef, this)
+ }
+
+ connectedCallback() {
+ // Because the element can be long lived while the AS
+ // user does not reference it (f.e. it is sitting in a
+ // DOM tree somewhere), we need to keep the AS-side
+ // object alive so the user's AS-side state will stay
+ // intact (otherwise the AS-side interface would be
+ // ephemeral and on each access of the JS-side
+ // element a new AS-side instance would be created
+ // with new AS-side state, destroying the AS user's
+ // logic). Non-custom elements don't have state on
+ // the AS-side, so their AS-side interfaces are
+ // ephemeral (created only when needed).
+ this.__pin()
+
+ asdom.__asdom_connectedCallback(this.__asRef)
+ }
+
+ disconnectedCallback() {
+ asdom.__asdom_disconnectedCallback(this.__asRef)
+
+ // If the element is no longer in the DOM and therefore
+ // not held onto by the JS-side (assuming the app is
+ // written purely in AS and no JS code is holding
+ // the element), then we should unpin it in case
+ // the AS user will let go of the object, so the
+ // AS-side instance will be collected.
+ this.__unpin()
+ }
+
+ adoptedCallback() {
+ asdom.__asdom_adoptedCallback(this.__asRef)
+ }
+
+ attributeChangedCallback(name, oldVal, newVal) {
+ asdom.__asdom_attributeChangedCallback(
+ this.__asRef,
+ asdom.__newString(name),
+ asdom.__newString(oldVal),
+ asdom.__newString(newVal),
+ )
+ }
+ }
+}
diff --git a/glue/index.js b/glue/index.js
index c2289b4..9c744a8 100644
--- a/glue/index.js
+++ b/glue/index.js
@@ -1,3 +1,7 @@
+// @ts-check
+
+import {createAsdomCustomElementClass} from './AsdomCustomElement.js'
+
class Refs extends Map {
/** @type {Map} */
__reverse = new Map()
@@ -19,23 +23,56 @@ class Refs extends Map {
keyFrom(b) {
return this.__reverse.get(b)
}
+
+ delete(a) {
+ this.__reverse.delete(this.get(a))
+ super.delete(a)
+ }
}
export class Asdom {
- __refs = new Refs()
+ // This maps AS mirror object instances (by their pointer) to their respective JS-side objects.
+ __objectRefs = new Refs()
+
__nextRefToTrack
- // Direct refs to the Wasm module's exports for convenience
+ // Direct refs to the Wasm module's exports for convenience {{
+
+ __exports = null
+
+ /** @type {(ptr: number) => string} */
__getString
__newString
__getArray
- table
- asdom_connectedCallback
- asdom_disconnectedCallback
- asdom_adoptedCallback
- asdom_attributeChangedCallback
-
- __exports = null
+ __getArrayView
+ __newArray
+ __pin
+ __unpin
+ __table
+ __asdom_connectedCallback
+ __asdom_disconnectedCallback
+ __asdom_adoptedCallback
+ __asdom_attributeChangedCallback
+
+ // }}
+
+ // cache vars {{
+
+ /** @type {WeakMap} */ __body = new WeakMap()
+ /** @type {WeakMap} */ __firstElementChild = new WeakMap()
+ /** @type {WeakMap} */ __lastElementChild = new WeakMap()
+ /** @type {WeakMap} */ __nextElementSibling = new WeakMap()
+ /** @type {WeakMap} */ __previousElementSibling = new WeakMap()
+ /** @type {WeakMap} */ __querySelector = new WeakMap()
+ /** @type {WeakMap} */ __parentNode = new WeakMap()
+ /** @type {WeakMap} */ __parentElement = new WeakMap()
+ /** @type {WeakMap} */ __firstChild = new WeakMap()
+ /** @type {WeakMap} */ __lastChild = new WeakMap()
+ /** @type {WeakMap} */ __nextSibling = new WeakMap()
+ /** @type {WeakMap} */ __previousSibling = new WeakMap()
+ /** @type {WeakMap} */ __item = new WeakMap()
+
+ // }}
get wasmExports() {
return this.__exports
@@ -46,15 +83,24 @@ export class Asdom {
this.__getString = e.__getString
this.__newString = e.__newString
this.__getArray = e.__getArray
- this.table = e.table
- this.asdom_connectedCallback = e.asdom_connectedCallback
- this.asdom_disconnectedCallback = e.asdom_disconnectedCallback
- this.asdom_adoptedCallback = e.asdom_adoptedCallback
- this.asdom_attributeChangedCallback = e.asdom_attributeChangedCallback
+ this.__getArrayView = e.__getArrayView
+ this.__newArray = e.__newArray
+ this.__pin = e.__pin
+ this.__unpin = e.__unpin
+ this.__table = e.table
+ this.__asdom_connectedCallback = e.asdom_connectedCallback
+ this.__asdom_disconnectedCallback = e.asdom_disconnectedCallback
+ this.__asdom_adoptedCallback = e.asdom_adoptedCallback
+ this.__asdom_attributeChangedCallback = e.asdom_attributeChangedCallback
+ this.__asdom_triggerEventListener = e.asdom_triggerEventListener
}
+ /**
+ * @param {number} fnIndex - The index into the WebAssembly.Table of a function inside the AssemblyScript module.
+ * @returns {(...args: any[]) => any} - A JavaScript-side function that proxies arguments and return value to the AssemblyScript function.
+ */
fn(fnIndex) {
- return this.table.get(fnIndex)
+ return this.__table.get(fnIndex)
}
/**
@@ -84,352 +130,832 @@ export class Asdom {
this.__nextRefToTrack = undefined
// TODO elements need to be associated with documents on the AS-side so they can have ownerDocument properties.
- this.__refs.set(id, ref)
+ this.__objectRefs.set(id, ref)
},
- },
- asDOM_Window: {
- trackWindow: id => {
- this.__refs.set(id, window)
+ releaseObject: id => {
+ this.__objectRefs.delete(id)
},
- /**
- * @param {number} id
- * @param {number} ceId
- */
- getCustomElements: (id, ceId) => {
- /** @type {Window} */
- const window = this.__refs.get(id)
- const ce = window.customElements
- let key = this.__refs.keyFrom(ce)
- if (!key) this.__refs.set((key = ceId), ce)
- return key
+ log: str => {
+ console.log('AS: ' + this.__getString(str))
},
},
- asDOM_CustomElementRegistry: {
- // customElements.define()
- define: (id, tag, factory, attributes) => {
- tag = this.__getString(tag)
+ asDOM_Object: {
+ toString: noArgStringReturnFunction(this, 'toString'),
+ },
+ asDOM_History: {
+ pushState: (id, state, title, url) => {
+ /** @type {History} */
+ const self = this.__objectRefs.get(id)
+
+ // TODO state is an pointer to an AS object, but AS doesn't have
+ // dynamic objects. Handle state somehow (with ason or
+ // as-json?).
+ state = {}
+
+ self.pushState(state, this.__getString(title), this.__getString(url))
+ },
+ replaceState: (id, state, title, url) => {
+ /** @type {History} */
+ const self = this.__objectRefs.get(id)
- const customElements = this.__refs.get(id)
+ // TODO state is an pointer to an AS object, but AS doesn't have
+ // dynamic objects. Handle state somehow (with ason or
+ // as-json?).
+ state = {}
- const asdom = this
+ self.replaceState(state, this.__getString(title), this.__getString(url))
+ },
+ },
+ asDOM_Location: {
+ setHref: setString(this, 'href'),
+ getHref: getString(this, 'href'),
+ setProtocol: setString(this, 'protocol'),
+ getProtocol: getString(this, 'protocol'),
+ setHost: setString(this, 'host'),
+ getHost: getString(this, 'host'),
+ setHostname: setString(this, 'hostname'),
+ getHostname: getString(this, 'hostname'),
+ setPort: setString(this, 'port'),
+ getPort: getString(this, 'port'),
+ setPathname: setString(this, 'pathname'),
+ getPathname: getString(this, 'pathname'),
+ setSearch: setString(this, 'search'),
+ getSearch: getString(this, 'search'),
+ setHash: setString(this, 'hash'),
+ getHash: getString(this, 'hash'),
+ getOrigin: getString(this, 'origin'),
+ reload: noArgNoReturnFunction(this, 'reload'),
+ replace: stringArgNoReturnFunction(this, 'replace'),
+ },
+ asDOM_EventTarget: {
+ addEventListenerCallback: (id, eventName, callback /* TODO , optionsOrUseCapture*/) => {
+ /** @type {EventTarget} */
+ const self = this.__objectRefs.get(id)
+ self.addEventListener(this.__getString(eventName), this.fn(callback))
+ },
+ addEventListenerObject: (id, eventName, listenerId /* TODO , optionsOrUseCapture*/) => {
+ /** @type {EventTarget} */
+ const self = this.__objectRefs.get(id)
- class AsdomElement extends HTMLElement {
- __asRef = -1
+ // A listener can only be added once.
+ if (this.__objectRefs.get(listenerId)) return
- static get observedAttributes() {
- return asdom.stringArray(attributes)
- }
+ const listener = event => this.__asdom_triggerEventListener(listenerId /*TODO , event*/)
- constructor() {
- super()
+ this.__objectRefs.set(listenerId, listener)
- this.__asRef = asdom.fn(factory)()
- asdom.__refs.set(this.__asRef, this)
- }
+ self.addEventListener(this.__getString(eventName), listener)
+ this.__pin(listenerId)
+ },
+ removeEventListenerCallback: (id, eventName, callback /* TODO , optionsOrUseCapture*/) => {
+ /** @type {EventTarget} */
+ const self = this.__objectRefs.get(id)
- connectedCallback() {
- asdom.asdom_connectedCallback(this.__asRef)
- }
+ console.log('---------------------', this.fn(callback) === this.fn(callback))
- disconnectedCallback() {
- asdom.asdom_disconnectedCallback(this.__asRef)
- }
+ self.removeEventListener(this.__getString(eventName), this.fn(callback))
+ },
+ removeEventListenerObject: (id, eventName, listenerId /* TODO , optionsOrUseCapture*/) => {
+ /** @type {EventTarget} */
+ const self = this.__objectRefs.get(id)
- adoptedCallback() {
- asdom.asdom_adoptedCallback(this.__asRef)
- }
+ const listener = this.__objectRefs.get(listenerId)
- attributeChangedCallback(name, oldVal, newVal) {
- asdom.asdom_attributeChangedCallback(
- this.__asRef,
- asdom.__newString(name),
- asdom.__newString(oldVal),
- asdom.__newString(newVal),
- )
- }
- }
+ // Nothing to do if the listener wasn't added yet.
+ if (!listener) return
+
+ self.removeEventListener(this.__getString(eventName), listener)
- customElements.define(tag, AsdomElement)
+ this.__objectRefs.delete(listenerId)
+ this.__unpin(listenerId)
},
},
- asDOM_Document: {
- getUrl: id => {
- const document = this.__refs.get(id)
- return this.__newString(document.URL)
+ asDOM_Window: {
+ trackWindow: id => {
+ this.__objectRefs.set(id, window)
},
- setDocument: id => {
- this.__refs.set(id, document)
+ /**
+ * @param {number} id
+ * @param {number} objId
+ */
+ getDocument: (id, objId) => {
+ /** @type {Window} */
+ const self = this.__objectRefs.get(id)
+ const obj = self.document
+ let key = this.__objectRefs.keyFrom(obj)
+ if (!key) this.__objectRefs.set((key = objId), obj)
+ return key
},
- getDocument: id => {
- if (!this.__refs.get(id)) this.wasmImports.asDOM_Document.setDocument(id)
- return this.__refs.get(id)
+ /**
+ * @param {number} id
+ * @param {number} objId
+ */
+ getCustomElements: (id, objId) => {
+ /** @type {Window} */
+ const self = this.__objectRefs.get(id)
+ const obj = self.customElements
+ let key = this.__objectRefs.keyFrom(obj)
+ if (!key) this.__objectRefs.set((key = objId), obj)
+ return key
},
- setElement: (docId, elId, tag) => {
- tag = this.__getString(tag)
- let el =
- tag === 'body'
- ? document.body || thro('bug!')
- : this.wasmImports.asDOM_Document.documentCreateElement(docId, tag)
- this.__refs.set(elId, el)
+ /**
+ * @param {number} id
+ * @param {number} objId
+ */
+ getHistory: (id, objId) => {
+ /** @type {Window} */
+ const self = this.__objectRefs.get(id)
+ const obj = self.history
+ let key = this.__objectRefs.keyFrom(obj)
+ if (!key) this.__objectRefs.set((key = objId), obj)
+ return key
},
- trackNextElement: (docId, id) => {
- const ref = this.__nextRefToTrack
+ /**
+ * @param {number} id
+ * @param {number} objId
+ */
+ getLocation: (id, objId) => {
+ /** @type {Window | Document} */
+ const self = this.__objectRefs.get(id)
+ const obj = self.location
+ let key = this.__objectRefs.keyFrom(obj)
+ if (!key) this.__objectRefs.set((key = objId), obj)
+ return key
+ },
+ // window.onpopstate
+ setOnpopstate: (id, callback) => {
+ /** @type {Window} */
+ const self = this.__objectRefs.get(id)
+ self.onpopstate = callback === -1 ? null : this.fn(callback)
+ },
+ getOnpopstate: id => {
+ /** @type {Window} */
+ const self = this.__objectRefs.get(id)
+ // TODO How to "return" a JS function so that AS can call it?
+ },
+ },
+ asDOM_CustomElementRegistry: {
+ // customElements.define()
+ define: (id, tagName, factory, attributes) => {
+ tagName = this.__getString(tagName)
+ const customElements = this.__objectRefs.get(id)
+ customElements.define(tagName, createAsdomCustomElementClass(this, factory, attributes))
+ },
+ },
+ asDOM_Document: {
+ getUrl: id => {
+ const self = this.__objectRefs.get(id)
+ return this.__newString(self.URL)
+ },
+ getBody: id => {
+ /** @type {Document} */
+ const self = this.__objectRefs.get(id)
+ const result = self.body
- if (!ref) {
- throw new Error(
- 'Bug, this should not happen, trackNextElement should have been called synchronously right after an existing element was referenced and an AS-side objet created to mirror it.',
- )
- }
+ if (this.__body.get(self) === result) return valueNotChanged
+ this.__body.set(self, result) // The old value can then be GC'd.
- this.__nextRefToTrack = undefined
+ if (!result) return 0 // null
- // TODO elements need to be associated with documents on the AS-side so they can have ownerDocument properties.
- this.__refs.set(id, ref)
+ return this.getObjectIdOrType(result)
},
- getElement: id => {
- return this.__refs.get(id)
+ setBody: (id, bodyId) => {
+ // TODO
},
// document.createElement()
- documentCreateElement: (id, tag) => {
- const document = this.__refs.get(id)
- return document.createElement(tag)
- },
- documentHasBody: id => {
- const document = this.__refs.get(id)
- return document.body ? true : false
+ createElement: (id, tagName /*, TODO options */) => {
+ /** @type {Document} */
+ const self = this.__objectRefs.get(id)
+ const result = self.createElement(this.__getString(tagName))
+ return this.getObjectIdOrType(result)
},
// document.createTextNode()
- createTextNode: (docId, textId, data) => {
- const document = this.__refs.get(docId)
- const text = document.createTextNode(this.__getString(data))
- this.__refs.set(textId, text)
+ createTextNode: (id, data) => {
+ /** @type {Document} */
+ const self = this.__objectRefs.get(id)
+ const result = self.createTextNode(this.__getString(data))
+ return this.getObjectIdOrType(result)
},
},
asDOM_Element: {
+ getTagName: id => {
+ /** @type {Element} */
+ const el = this.__objectRefs.get(id)
+ return this.__newString(el.tagName)
+ },
// element.setAttribute
elSetAttribute: (id, attr, value) => {
- const el = this.__refs.get(id)
+ /** @type {Element} */
+ const el = this.__objectRefs.get(id)
el.setAttribute(this.__getString(attr), this.__getString(value))
},
// element.getAttribute
elGetAttribute: (id, attr) => {
- const el = this.__refs.get(id)
+ /** @type {Element} */
+ const el = this.__objectRefs.get(id)
return this.__newString(el.getAttribute(this.__getString(attr)))
},
// element.innerHTML
- elSetInnerHTML: (id, value) => {
- const el = this.__refs.get(id)
- el.innerHTML = this.__getString(value)
+ setInnerHTML: setStringOrNull(this, 'innerHTML'),
+ getInnerHTML: getString(this, 'innerHTML'),
+ getChildren: (id, listId) => {
+ /** @type {Element | Document | DocumentFragment} */
+ const self = this.__objectRefs.get(id)
+ const list = self.children
+ if (!this.__objectRefs.keyFrom(list)) this.__objectRefs.set(listId, list)
},
- // element.innerHTML
- elGetInnerHTML: id => {
- const el = this.__refs.get(id)
- return this.__newString(el.innerHTML)
+ getClientWidth: id => {
+ /** @type {Element} */
+ const self = this.__objectRefs.get(id)
+ return self.clientWidth
},
- // element.innerText
- elSetInnerText: (id, value) => {
- const el = this.__refs.get(id)
- el.innerText = this.__getString(value)
+ getClientHeight: id => {
+ /** @type {Element} */
+ const self = this.__objectRefs.get(id)
+ return self.clientHeight
},
- // element.innerText
- elGetInnerText: id => {
- new Audio()
- const el = this.__refs.get(id)
- return this.__newString(el.innerText)
+ getFirstElementChild: id => {
+ /** @type {Element | Document | DocumentFragment} */
+ const self = this.__objectRefs.get(id)
+ const result = self.firstElementChild
+
+ if (this.__firstElementChild.get(self) === result) return valueNotChanged
+ this.__firstElementChild.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
+ getLastElementChild: id => {
+ /** @type {Element | Document | DocumentFragment} */
+ const self = this.__objectRefs.get(id)
+ const result = self.lastElementChild
+
+ if (this.__lastElementChild.get(self) === result) return valueNotChanged
+ this.__lastElementChild.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
+ getNextElementSibling: id => {
+ /** @type {Element} */
+ const self = this.__objectRefs.get(id)
+ const result = self.nextElementSibling
+
+ if (this.__nextElementSibling.get(self) === result) return valueNotChanged
+ this.__nextElementSibling.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
+ getPreviousElementSibling: id => {
+ /** @type {Element} */
+ const self = this.__objectRefs.get(id)
+ const result = self.previousElementSibling
+
+ if (this.__previousElementSibling.get(self) === result) return valueNotChanged
+ this.__previousElementSibling.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
},
// element.onclick
- elOnClick: (id, callback) => {
- const el = this.__refs.get(id)
- el.onclick = this.fn(callback)
+ setOnclick: (id, callback) => {
+ /** @type {Element} */
+ const self = this.__objectRefs.get(id)
+ self.onclick = callback === -1 ? null : this.fn(callback)
+ },
+ getOnclick: id => {
+ /** @type {Element} */
+ const self = this.__objectRefs.get(id)
+ // TODO How to "return" a JS function so that AS can call it?
},
// element.click()
elClick: id => {
- const el = this.__refs.get(id)
+ /** @type {Element} */
+ const el = this.__objectRefs.get(id)
el.click()
},
// element.remove()
remove: id => {
- const el = this.__refs.get(id)
+ /** @type {Element} */
+ const el = this.__objectRefs.get(id)
el.remove()
},
+ querySelector: (id, selectors) => {
+ /** @type {Element | Document | DocumentFragment} */
+ const self = this.__objectRefs.get(id)
+ const result = self.querySelector(this.__getString(selectors))
+
+ if (this.__querySelector.get(self) === result) return valueNotChanged
+ this.__querySelector.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
+ querySelectorAll: (id, selectors) => {
+ /** @type {Element | Document | DocumentFragment} */
+ const node = this.__objectRefs.get(id)
+ const result = node.querySelectorAll(this.__getString(selectors))
+ return this.getObjectIdOrType(result, 202)
+ },
+ getShadowRoot: id => {
+ /** @type {Element} */
+ const el = this.__objectRefs.get(id)
+ const root = el.shadowRoot
+ if (!root) return 0 // null
+ return this.__objectRefs.keyFrom(root)
+ },
+ attachShadow: (id, rootId, mode) => {
+ /** @type {Element} */
+ const el = this.__objectRefs.get(id)
+ const root = el.attachShadow({mode: this.__getString(mode)})
+ this.__objectRefs.set(rootId, root)
+ },
+ },
+ asDOM_HTMLElement: {
+ // element.innerText
+ setInnerText: setStringOrNull(this, 'innerText'),
+ getInnerText: getString(this, 'innerText'),
},
asDOM_Node: {
- log: str => {
- if (this.__getString(str) == null || this.__getString(str) === 'null') debugger
- console.log(this.__getString(str))
- },
// node.appendChild()
nodeAppendChild: (parentId, childId) => {
- const parent = this.__refs.get(parentId)
- const child = this.__refs.get(childId)
+ const parent = this.__objectRefs.get(parentId)
+ const child = this.__objectRefs.get(childId)
// We'd actually return the object here when we switch to `externref`.
/*return*/ parent.appendChild(child)
},
// node.removeChild()
nodeRemoveChild: (parentId, childId) => {
- const parent = this.__refs.get(parentId)
- const child = this.__refs.get(childId)
+ const parent = this.__objectRefs.get(parentId)
+ const child = this.__objectRefs.get(childId)
// We'd actually return the object here when we switch to `externref`.
/*return*/ parent.removeChild(child)
},
+ getParentNode: id => {
+ /** @type {Node} */
+ const self = this.__objectRefs.get(id)
+ const result = self.parentNode
+
+ if (this.__parentNode.get(self) === result) return valueNotChanged
+ this.__parentNode.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
+ getParentElement: id => {
+ /** @type {Node} */
+ const self = this.__objectRefs.get(id)
+ const result = self.parentElement
+
+ if (this.__parentElement.get(self) === result) return valueNotChanged
+ this.__parentElement.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
// node.firstChild (readonly)
getFirstChild: id => {
/** @type {Node} */
- const node = this.__refs.get(id)
- const child = node.firstChild
-
- if (!child) return 0 // null
-
- const key = this.__refs.keyFrom(child)
-
- if (!key) {
- this.__nextRefToTrack = child
-
- // Returning negative means the AS-side should create an instance to track the JS-side object.
- if (child instanceof Element) {
- const tag = child.tagName
- if (tag === 'BODY') return -2
- else if (tag === 'DIV') return -3
- else if (tag === 'SPAN') return -4
- else if (tag === 'P') return -5
- else if (tag === 'A') return -6
- else if (tag === 'SCRIPT') return -7
- else if (tag === 'TEMPLATE') return -8
- else if (tag === 'AUDIO') return -9
- else if (tag === 'IMG') return -10
- else if (tag === 'H1') return -11
- else if (tag === 'H2') return -12
- else if (tag === 'H3') return -13
- else if (tag === 'H4') return -14
- else if (tag === 'H5') return -15
- else if (tag === 'H6') return -16
- else if (tag.includes('-'))
- throw new Error('Hyphenated (possibly-custom) element not supported yet.')
- else return -1 // HTMLUnknownElement
- } else {
- throw new Error('TODO: firstChild not yet supported for nodes besides Element nodes.')
- }
- }
+ const self = this.__objectRefs.get(id)
+ const result = self.firstChild
- return key
+ if (this.__firstChild.get(self) === result) return valueNotChanged
+ this.__firstChild.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
},
- cloneNode: (id, deep = false) => {
+ getLastChild: id => {
/** @type {Node} */
- const node = this.__refs.get(id)
-
- const clone = node.cloneNode(deep)
-
- const key = this.__refs.keyFrom(clone)
-
- if (!key) {
- this.__nextRefToTrack = clone
-
- // Returning negative means the AS-side should create an instance to track the JS-side object.
- if (clone instanceof Element) {
- const tag = clone.tagName
- if (tag === 'BODY') return -2
- else if (tag === 'DIV') return -3
- else if (tag === 'SPAN') return -4
- else if (tag === 'P') return -5
- else if (tag === 'A') return -6
- else if (tag === 'SCRIPT') return -7
- else if (tag === 'TEMPLATE') return -8
- else if (tag === 'AUDIO') return -9
- else if (tag === 'IMG') return -10
- else if (tag === 'H1') return -11
- else if (tag === 'H2') return -12
- else if (tag === 'H3') return -13
- else if (tag === 'H4') return -14
- else if (tag === 'H5') return -15
- else if (tag === 'H6') return -16
- else if (tag.includes('-'))
- throw new Error('Hyphenated (possibly-custom) element not supported yet.')
- else return -1 // HTMLUnknownElement
- } else {
- throw new Error('TODO: cloneNode not yet supported for nodes besides Element nodes.')
- }
- }
+ const self = this.__objectRefs.get(id)
+ const result = self.lastChild
- return key
+ if (this.__lastChild.get(self) === result) return valueNotChanged
+ this.__lastChild.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
},
- getParentNode: id => {
+ getNextSibling: id => {
/** @type {Node} */
- const node = this.__refs.get(id)
- const parent = node.parentNode
-
- if (!parent) return 0 // null
-
- const key = this.__refs.keyFrom(parent)
-
- if (!key) {
- this.__nextRefToTrack = parent
-
- // Returning negative means the AS-side should create an instance to track the JS-side object.
- if (parent instanceof Element) {
- const tag = parent.tagName
- if (tag === 'BODY') return -2
- else if (tag === 'DIV') return -3
- else if (tag === 'SPAN') return -4
- else if (tag === 'P') return -5
- else if (tag === 'A') return -6
- else if (tag === 'SCRIPT') return -7
- else if (tag === 'TEMPLATE') return -8
- else if (tag === 'AUDIO') return -9
- else if (tag === 'IMG') return -10
- else if (tag === 'H1') return -11
- else if (tag === 'H2') return -12
- else if (tag === 'H3') return -13
- else if (tag === 'H4') return -14
- else if (tag === 'H5') return -15
- else if (tag === 'H6') return -16
- else if (tag.includes('-'))
- throw new Error('Hyphenated (possibly-custom) element not supported yet.')
- else return -1 // HTMLUnknownElement
- } else {
- throw new Error('TODO: parentNode not yet supported for nodes besides Element nodes.')
- }
- }
+ const self = this.__objectRefs.get(id)
+ const result = self.nextSibling
- return key
+ if (this.__nextSibling.get(self) === result) return valueNotChanged
+ this.__nextSibling.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
+ getPreviousSibling: id => {
+ /** @type {Node} */
+ const self = this.__objectRefs.get(id)
+ const result = self.previousSibling
+
+ if (this.__previousSibling.get(self) === result) return valueNotChanged
+ this.__previousSibling.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
+ cloneNode: (id, deep = false) => {
+ /** @type {Node} */
+ const node = this.__objectRefs.get(id)
+ const result = node.cloneNode(deep)
+ return this.getObjectIdOrType(result)
+ },
+ getChildNodes: (id, listId) => {
+ /** @type {Node} */
+ const self = this.__objectRefs.get(id)
+ const list = self.childNodes
+ if (!this.__objectRefs.keyFrom(list)) this.__objectRefs.set(listId, list)
},
},
asDOM_Audio: {
- initAudio: (srcPtr, id) => {
- const src = this.__getString(srcPtr)
- this.__refs.set(id, new Audio(src))
+ initAudio: (id, src) => {
+ this.__objectRefs.set(id, new Audio(this.__getString(src)))
},
// element.play()
playAudio: id => {
- const el = this.__refs.get(id)
+ const el = this.__objectRefs.get(id)
el.play()
},
// element.pause()
pauseAudio: id => {
- const el = this.__refs.get(id)
+ const el = this.__objectRefs.get(id)
el.pause()
},
// element.autoplay
- setAutoplay: (toggle, id) => {
- const el = this.__refs.get(id)
- el.autoplay = toggle ? true : false
+ setAutoplay: (id, toggle) => {
+ const el = this.__objectRefs.get(id)
+ el.autoplay = !!toggle
},
// element.autoplay
getAutoplay: id => {
- const el = this.__refs.get(id)
- return el.autoplay ? 1 : 0
+ /** @type {HTMLAudioElement} */
+ const el = this.__objectRefs.get(id)
+ return el.autoplay
},
},
asDOM_HTMLTemplateElement: {
// element.content (readonly)
getContent: (id, fragId) => {
- const el = this.__refs.get(id)
+ const el = this.__objectRefs.get(id)
const frag = el.content
- this.__refs.set(fragId, frag)
+ this.__objectRefs.set(fragId, frag)
+ },
+ },
+ asDOM_HTMLCanvasElement: {
+ /**
+ * @param {number} id
+ * @param {number} ctxId
+ * @param {number} typeNum
+ */
+ getContext: (id, ctxId, typeNum /*TODO , options*/) => {
+ /** @type {HTMLCanvasElement} */
+ const self = this.__objectRefs.get(id)
+ const result = self.getContext(getCanvasContextTypeString(typeNum))
+
+ // It must be valid because the AS bindings calling this only allow a static (compile-time) set of extension types.
+ if (!result) throw new Error('Invalid extension type.')
+
+ this.__objectRefs.set(ctxId, result)
+ },
+ },
+ asDOM_NodeList: {
+ // list.length
+ getLength: id => {
+ /** @type {NodeList} */
+ const self = this.__objectRefs.get(id)
+ return self.length
+ },
+ item: (id, index) => {
+ /** @type {NodeList} */
+ const self = this.__objectRefs.get(id)
+ const result = self.item(index)
+
+ if (this.__item.get(self) === result) return valueNotChanged
+ this.__item.set(self, result) // The old value can then be GC'd.
+
+ if (!result) return 0 // null
+
+ return this.getObjectIdOrType(result)
+ },
+ },
+ asDOM_WebGLRenderingContext: {
+ attachShader: (id, progId, shaderId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const program = this.__objectRefs.get(progId)
+ const shader = this.__objectRefs.get(shaderId)
+ self.attachShader(program, shader)
+ },
+ bindBuffer: (id, target, bufId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const buffer = this.__objectRefs.get(bufId)
+ self.bindBuffer(target, buffer)
+ },
+ bufferData: (id, arrayType, target, arrayId, usage) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+
+ // TODO use `arrayType` to call the more efficient functions
+ // like `__getArrayBuffer`, `__getInt8ArrayView`, etc.
+ const array = this.__getArrayView(arrayId)
+ console.log(array)
+
+ self.bufferData(target, array, usage)
+ },
+ clear: (id, mask) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.clear(mask)
+ },
+ clearColor: (id, r, g, b, a) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.clearColor(r, g, b, a)
+ },
+ clearDepth: (id, depth) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.clearDepth(depth)
+ },
+ compileShader: (id, shaderId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const shader = this.__objectRefs.get(shaderId)
+ self.compileShader(shader)
+ console.log('compile shader')
+ },
+ createBuffer: (id, bufId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const result = self.createBuffer()
+ this.__objectRefs.set(bufId, result)
+ },
+ createProgram: (id, progId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const result = self.createProgram()
+ this.__objectRefs.set(progId, result)
+ },
+ createShader: (id, shaderId, type) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ let result = self.createShader(type)
+ this.__objectRefs.set(shaderId, result)
+ console.log('create shader', result)
+ },
+ depthFunc: (id, func) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.depthFunc(func)
+ },
+ drawArrays: (id, mode, first, count) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.drawArrays(mode, first, count)
+ },
+ enable: (id, capability) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.enable(capability)
+ },
+ enableVertexAttribArray: (id, index) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.enableVertexAttribArray(index)
+ },
+ getAttribLocation: (id, programId, name) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const program = this.__objectRefs.get(programId)
+ return self.getAttribLocation(program, this.__getString(name))
+ },
+ /**
+ * @param {number} id
+ * @param {number} extId
+ * @param {number} typeNum
+ */
+ getExtension: (id, extId, typeNum) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const result = self.getExtension(getWebGLExtensionTypeString(typeNum))
+
+ // It must be valid because the AS bindings calling this only allow a static (compile-time) set of extension types.
+ if (!result) throw new Error('Invalid extension type.')
+
+ this.__objectRefs.set(extId, result)
+ },
+ getUniformLocation: (id, uniLocationId, programId, name) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const program = this.__objectRefs.get(programId)
+ const result = self.getUniformLocation(program, this.__getString(name))
+ this.__objectRefs.set(uniLocationId, result)
+ },
+ linkProgram: (id, progId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const program = this.__objectRefs.get(progId)
+ self.linkProgram(program)
+ },
+ /**
+ * @param {number} id
+ * @param {number} shaderId
+ * @param {number} source
+ */
+ shaderSource: (id, shaderId, source) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const shader = this.__objectRefs.get(shaderId)
+ self.shaderSource(shader, this.__getString(source))
+ console.log('add shader source')
+ },
+ uniformMatrix4fv: (id, locationId, transpose, valueId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const location = this.__objectRefs.get(locationId)
+ const array = this.__getArrayView(valueId)
+ self.uniformMatrix4fv(location, transpose, array)
+ },
+ useProgram: (id, programId) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ const program = this.__objectRefs.get(programId)
+ self.useProgram(program)
+ },
+ vertexAttribPointer: (id, indx, size, type, normalized, stride, offset) => {
+ /** @type {WebGLRenderingContext} */
+ const self = this.__objectRefs.get(id)
+ self.vertexAttribPointer(indx, size, type, normalized, stride, offset)
},
},
}
+
+ /**
+ * If an JS-side element is tracked, returns the ID of the AS-side element
+ * if it exists, otherwise returns the negated type number of the
+ * element that should be created on the AS-side. The type number is
+ * negative because the AS-side IDs are only ever positive, so negative
+ * numbers won't collide with IDs within the first IDs between 0 and
+ * 2^31.
+ *
+ * @param {object} obj - The object whose type ID we wish to get.
+ * @param {number} [explicitTypeOverride] - Optional. Provide an explicit
+ * type ID if we already know the object's type ahead of time, to skip
+ * the cost of instanceof checks, etc, but to still trigger the other
+ * machinery.
+ * @returns {number} - The object's type ID.
+ */
+ getObjectIdOrType(obj, explicitTypeOverride) {
+ const id = this.__objectRefs.keyFrom(obj)
+
+ if (!id) {
+ this.__nextRefToTrack = obj
+
+ return -(explicitTypeOverride ?? getObjectType(obj))
+ }
+
+ return id
+ }
}
function thro(err) {
throw err
}
+
+function getObjectType(obj) {
+ // Returning negative means the AS-side should create an instance to track the JS-side object.
+
+ if (obj instanceof Element) {
+ const tag = obj.tagName
+ if (tag === 'BODY') return 2
+ else if (tag === 'DIV') return 3
+ else if (tag === 'SPAN') return 4
+ else if (tag === 'P') return 5
+ else if (tag === 'A') return 6
+ else if (tag === 'SCRIPT') return 7
+ else if (tag === 'TEMPLATE') return 8
+ else if (tag === 'AUDIO') return 9
+ else if (tag === 'IMG') return 10
+ else if (tag === 'H1') return 11
+ else if (tag === 'H2') return 12
+ else if (tag === 'H3') return 13
+ else if (tag === 'H4') return 14
+ else if (tag === 'H5') return 15
+ else if (tag === 'H6') return 16
+ else if (tag === 'CANVAS') return 17
+ else if (tag.includes('-')) throw new Error('Hyphenated (possibly-custom) element not supported yet.')
+ else return 1 // HTMLUnknownElement
+ } else if (obj instanceof Text) {
+ return 100
+ } else if (obj instanceof HTMLCollection) {
+ return 200
+ } else if (obj instanceof NodeList) {
+ return 201
+ }
+ // else if (obj instanceof NodeList) {
+ // return 202
+ // }
+ // else if (obj is ANGLE_instanced_arrays) {
+ // return 300
+ // }
+ // else if (obj instanceof WebGLShader) { // AS makes this ahead of time.
+ // return 400
+ // }
+ else {
+ throw new Error('Unsupported object (either it is TODO, or an invalid type override was provided).')
+ }
+}
+
+// TODO convert to TypeScript and use an `enum` instead.
+const WebGLExtensionType = {
+ ANGLE_instanced_arrays: 0,
+}
+
+/**
+ * @param {number} typeNum
+ */
+function getWebGLExtensionTypeString(typeNum) {
+ if (typeNum === 0) return 'ANGLE_instanced_arrays'
+ if (typeNum === 1) return 'EXT_blend_minmax'
+ // ...
+}
+
+/**
+ * @param {number} typeNum
+ */
+function getCanvasContextTypeString(typeNum) {
+ if (typeNum === 0) return '2d'
+ if (typeNum === 1) return 'bitmaprenderer'
+ if (typeNum === 2) return 'webgl'
+ if (typeNum === 3) return 'webgl2'
+ // ...
+}
+
+/** @param {Asdom} asdom */
+function setString(asdom, key) {
+ return (id, str) => {
+ const self = asdom.__objectRefs.get(id)
+ self[key] = asdom.__getString(str)
+ }
+}
+
+/** @param {Asdom} asdom */
+function setStringOrNull(asdom, key) {
+ return (id, str) => {
+ const self = asdom.__objectRefs.get(id)
+ if (str === 0) self[key] = null
+ else self[key] = asdom.__getString(str)
+ }
+}
+
+/** @param {Asdom} asdom */
+function getString(asdom, key) {
+ return id => {
+ const self = asdom.__objectRefs.get(id)
+ return asdom.__newString(self[key])
+ }
+}
+
+/** @param {Asdom} asdom */
+function noArgNoReturnFunction(asdom, key) {
+ return id => {
+ const self = asdom.__objectRefs.get(id)
+ self[key]()
+ }
+}
+
+/** @param {Asdom} asdom */
+function stringArgNoReturnFunction(asdom, key) {
+ return (id, str) => {
+ const self = asdom.__objectRefs.get(id)
+ self[key](asdom.__getString(str))
+ }
+}
+
+/** @param {Asdom} asdom */
+function noArgStringReturnFunction(asdom, key) {
+ return id => {
+ const self = asdom.__objectRefs.get(id)
+ return asdom.__newString(self[key]())
+ }
+}
+
+const i32min = -2147483648
+const valueNotChanged = i32min
diff --git a/package.json b/package.json
index faf21ec..cd00781 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "asdom",
- "version": "0.1.13",
+ "version": "0.2.2",
"type": "module",
"homepage": "https://lume.io",
"repository": {
@@ -12,6 +12,7 @@
},
"scripts": {
"build": "npm run asbuild:untouched && npm run asbuild:optimized",
+ "build:example": "cd example && npm install && npm run build:untouched",
"asbuild:untouched": "asc assembly/index.ts --target debug",
"asbuild:optimized": "asc assembly/index.ts --target release",
"test": "node tests",
@@ -21,7 +22,7 @@
"release:major": "npm version major -m 'v%s' && npm publish && git push --follow-tags"
},
"dependencies": {
- "@assemblyscript/loader": "^0.18.11"
+ "@assemblyscript/loader": "^0.19.5"
},
"devDependencies": {
"assemblyscript": "^0.19.5",
diff --git a/patterns.md b/patterns.md
new file mode 100644
index 0000000..a66aa74
--- /dev/null
+++ b/patterns.md
@@ -0,0 +1,43 @@
+# Binding Patterns and cases
+
+Notes on different types of binding patterns used in asdom with regards to how
+it gets or creates references in JS and associates them with AS-side
+references, and how it does some optimizations.
+
+- SET-OF-POSSIBLE-TYPES-NEW-REF - AS calls JS API without knowing what type of
+ object it will create
+ - It may be nullable
+ - AS needs to know the type of object to create after the JS call completes,
+ so glue code sends back an enum value specifying the type of mirror
+ object to create.
+ - AS side sends back the new mirror object ID for JS to map to the JS instance.
+ - An example of this is `document.querySelector('.foo')` which may return a
+ different object each time, or null. We do not know ahead of time which
+ object it is going to return.
+- PREDEFINED-TYPE-ALWAYS-SAME-REF - AS calls a JS API but knows ahead of time
+ what type of object will be created, so we can skip extra boundary crossing
+ by pre-making the object, then passing the ID to JS to make the mapping.
+ - On the AS side we can cache the value to avoid crossing to JS every time if
+ we know the value won't change after the initial call to JS (where each
+ call on the JS-side would return the same object ID each time).
+ - An example of this is the `Node.children` method which, for a given node,
+ always returns the same object.
+- PREDEFINED-TYPE-ALWAYS-NEW-REF - Similar to the previous pattern, the AS side
+ might know the type of object ahead of time, but the API returns a new object
+ each time. In this case, we don't use a cache variable, and just return a new
+ object on each call.
+ - An example of this is `CanvasRenderingContext2D.getImageData()` which
+ always return a new `ImageData` object.
+- If we know a predefined set of strings can be passed between AS and JS, we
+ don't need to waste CPU passing strings, but just passing an enum
+ representing the string values.
+ - An example of this is in `HTMLCanvasElement.getContext(type)` where we know
+ the allowed string values for `type`.
+- Some classes on the JS side are objects with no properties or methods. In
+ these cases, we can skip making AS-side mirror objects, and just use ID
+ numbers instead.
+ - For example, for WebGL, we can use `type WebGLShader = i32` instead of
+ `class WebGLShader` because the user will never need to use properties or
+ methods, and will only pass the "instances" around to other APIs (just
+ passing i32's). In these cases, there are only JS-side objects that are
+ matched to the passed ID numbers.
diff --git a/scripts/build.js b/scripts/build.js
new file mode 100644
index 0000000..b4a5923
--- /dev/null
+++ b/scripts/build.js
@@ -0,0 +1,108 @@
+import {exec as _exec} from 'child_process';
+import fs from 'fs';
+import path from 'path';
+import min from 'node-minify';
+import imagemin from 'imagemin';
+import imageminPngQuant from 'imagemin-pngquant';
+import {exit} from 'process';
+import {promisify} from 'util';
+
+const {readdir, copyFile, lstat, mkdir} = fs.promises;
+const exec = promisify(_exec);
+
+// Currently AS projects consume libs' AS code directly, so no need to build
+// webgl.wasm into a Wasm module. Maybe later we'll have dynamic and static
+// linking, in which case maybe we'd want to ship webgl.wasm too.
+/*
+const ASWebGLueWasm = './src/webgl.ts';
+const ASWebGLueWasmOut = './dist/webgl.wasm';
+let ascRun = `asc ${ASWebGLueWasm} --runtime stub -O3 --importMemory -o ${ASWebGLueWasmOut}`;
+exec(ascRun);
+*/
+
+const distDir = './dist';
+
+if (!fs.existsSync(distDir)) await mkdir(distDir, 0o744);
+
+await copyFile('./src/ASWebGLue.js', './dist/ASWebGLue.js');
+await copyFile('./src/ASWebGLue.d.ts', './dist/ASWebGLue.d.ts');
+
+const exampleDirectory = './src/examples/';
+
+// TODO Grab this option from the `--mode` CLI option.
+const MODE = 'dev';
+
+// In dev mode, we will output wasm files into the same folders as the example
+// source code. This makes it easy to serve the files, and to make quick
+// changes to the HTML files and refresh the browser without having to re-build
+// all examples again.
+const distDirectory = MODE === 'dev' ? './src/examples/' : './dist/examples/';
+
+// TODO Spread `asc` processes across threads using a huristic so we don't
+// overload the computer and crash. (Previously this script tried to run `asc`
+// on every example in parallel, which would crash if there wasn't enough
+// resources). Probably easier to use Gulp task runner for this, so it can
+// include watch mode that re-builds only a particular example that is modified
+// isntead of re-building everything.
+//
+// For now, it builds everything, one at a time.
+
+const files = await readdir(exampleDirectory);
+
+for (const file of files) {
+ const stats = await lstat(path.resolve(exampleDirectory, file));
+ if (!stats.isDirectory()) continue;
+
+ let subDir = file;
+
+ const exampleFiles = await readdir(exampleDirectory + file);
+
+ for (const exampleFile of exampleFiles) {
+ if (exampleFile.indexOf('.ts') >= 0) {
+ let fi = `${exampleDirectory}${subDir}/${exampleFile}`;
+ let fo = `${distDirectory}${subDir}/${exampleFile.replace('.ts', '.wasm')}`;
+ let ascRun = `asc ${fi} --runtime stub -O3 --importMemory -o ${fo}`;
+
+ console.log(ascRun);
+
+ try {
+ await exec(ascRun);
+ } catch (err) {
+ console.error('ERROR:\n', err.stderr);
+ exit(1);
+ }
+ } else if (exampleFile.indexOf('.html') >= 0) {
+ // We only minify the HTML files and output them into the dist/ dir when building for prod.
+ if (MODE === 'prod') {
+ console.log(`minify ${subDir}/${exampleFile}`);
+
+ await new Promise((resolve, reject) => {
+ min.minify({
+ compressor: 'html-minifier',
+ input: `${exampleDirectory}${subDir}/${exampleFile}`,
+ output: `${distDirectory}${subDir}/${exampleFile}`,
+ callback(err, min) {
+ if (err) reject(err);
+ else resolve();
+ },
+ });
+ });
+ }
+ } else if (exampleFile.indexOf('.png') >= 0) {
+ // We only compress the images and output them into the dist/ dir when building for prod.
+ if (MODE === 'prod') {
+ let fi = `${exampleDirectory}${subDir}/${exampleFile}`;
+ let fo = `${distDirectory}${subDir}`;
+
+ await imagemin([fi], {
+ destination: fo,
+ plugins: [
+ imageminPngQuant({
+ quality: [0.6, 0.8],
+ }),
+ ],
+ });
+ }
+ }
+ }
+}
diff --git a/supported-APIs.md b/supported-APIs.md
index ef925fc..a642988 100644
--- a/supported-APIs.md
+++ b/supported-APIs.md
@@ -1,14 +1,15 @@
# Suported APIs
-The following APIs are supported, and in some cases only partially. For
-example, document.createElement() can create currently any type of element,
+The following APIs are supported , and in some cases only partially. For
+example, `document.createElement()` can create currently any type of element,
however only a subset of available classes is supported (listed below). For any
elements that don't yet have a supporting class, an `HTMLUnknownElement`
instance will be returned. For example, `document.createElement('video')` will
currently return an instance of `HTMLUnknownElement` and you will not be able
-to use video-specific properties or methods, although you can still pass it
-around to other DOM APIs (please open an issue or PR for any APIs you may need,
-and we'll prioritize that way).
+to use video-specific properties or methods, but you can still set attributes
+on the element and you can still pass it around to other DOM APIs.
+
+Please open an issue or PR for any APIs you may need, and we'll prioritize that way.
# Class hierarchy
@@ -16,61 +17,153 @@ If a method or property is not listed in the outline, it means we haven't added
yet (or someone forgot to update this outline).
- `Object`
+ - `toString()`
- Subclasses:
- - `Node`
- - `static ELEMENT_NODE`
- - `static ATTRIBUTE_NODE`
- - `static TEXT_NODE`
- - `static CDATA_SECTION_NODE`
- - `static PROCESSING_INSTRUCTION_NODE`
- - `static COMMENT_NODE`
- - `static DOCUMENT_NODE`
- - `static DOCUMENT_TYPE_NODE`
- - `static DOCUMENT_FRAGMENT_NODE`
- - `nodeType`
- - `parentNode`
- - `firstChild`
- - `appendChild()`
- - `removeChild()`
- - `cloneNode()`
+ - `History`
+ - `pushState()`
+ - `replaceState()`
+ - `length`
+ - `CustomElementRegistry`
+ - `define()`
+ - `NodeList`
+ - `HTMLCollection`
+ - `Location`
+ - `href`
+ - `protocol`
+ - `host`
+ - `hostname`
+ - `port`
+ - `pathname`
+ - `search`
+ - `hash`
+ - `origin`
+ - `assign()`
+ - `reload()`
+ - `replace()`
+ - `toString()`
+ - `WebGLRenderingContext`
+ - `attachShader`
+ - `bindBuffer`
+ - `bufferData`
+ - `bufferData`
+ - `clear`
+ - `clearColor`
+ - `clearDepth`
+ - `compileShader`
+ - `createBuffer`
+ - `createProgram`
+ - `createShader`
+ - `depthFunc`
+ - `drawArrays`
+ - `enable`
+ - `enableVertexAttribArray`
+ - `getAttribLocation`
+ - `getExtension`
+ - `getUniformLocation`
+ - `linkProgram`
+ - `shaderSource`
+ - `uniformMatrix4fv`
+ - `useProgram`
+ - `vertexAttribPointer`
+ - `EventTarget`
+ - `addEventListener`
+ - `removeEventListener`
- Subclasses:
- - `DocumentFragment`
- - `CharacterData`
- - Subclasses:
- - `Text`
- - `Document`
- - `URL`
- - `body`
- - `createElement()`
- - `createTextNode()`
- - `Element`
- - `setAttribute()`
- - `getAttribute()`
- - `remove()`
- - `click()`
- - `innerHTML`
- - `onclick` (No `Event` object is passed into the callback yet, but at least you can react to a click)
+ - `Window`
+ - `document`
+ - `customElements`
+ - `history`
+ - `location`
+ - `onclick`
+ - `onpopstate`
+ - `Node`
+ - `static ELEMENT_NODE`
+ - `static ATTRIBUTE_NODE`
+ - `static TEXT_NODE`
+ - `static CDATA_SECTION_NODE`
+ - `static PROCESSING_INSTRUCTION_NODE`
+ - `static COMMENT_NODE`
+ - `static DOCUMENT_NODE`
+ - `static DOCUMENT_TYPE_NODE`
+ - `static DOCUMENT_FRAGMENT_NODE`
+ - `nodeType`
+ - `parentNode`
+ - `parentElement`
+ - `childNodes`
+ - `firstChild`
+ - `lastChild`
+ - `nextSibling`
+ - `previousSibling`
+ - `appendChild()`
+ - `removeChild()`
+ - `cloneNode()`
- Subclasses:
- - `HTMLElement` (`` and various other elements extend from this)
+ - `DocumentFragment`
+ - `children`
+ - `firstElementChild`
+ - `lastElementChild`
+ - `querySelector()`
+ - `querySelectorAll()`
+ - Subclasses:
+ - `ShadowRoot`
+ - `innerHTML`
+ - `CharacterData`
- Subclasses:
- - `HTMLBodyElement` (``)
- - `HTMLDivElement` (`