From f4ab928789c6ff9682d15cc9514a58eb26c8e0f1 Mon Sep 17 00:00:00 2001 From: Francois Date: Tue, 19 Sep 2023 17:39:55 -0400 Subject: [PATCH 01/20] Some cleanup and the start of rendering cylinders the proper way --- docs/test.tldr | 383 ++++++++++++++++++++ src/index.ts | 1 - src/meshes/CylinderMesh.ts | 20 - src/react/Axii.txt | 48 --- src/react/Box.txt | 124 ------- src/react/Cylinder.txt | 109 ------ src/react/CylinderMesh.txt | 120 ------ src/react/Grid.txt | 87 ----- src/renderer/Renderer.ts | 17 +- src/renderer/renderCylinder.ts | 81 +++++ src/renderer/{sphere.ts => renderSphere.ts} | 6 - src/shapes/Cylinder.ts | 36 +- src/shapes/Shape.ts | 13 +- workbench/main.ts | 6 +- workbench/scenes/Cylinders.ts | 114 ++++++ workbench/scenes/KitchenSink.ts | 3 - workbench/scenes/SingleCylinder.ts | 145 ++++++++ 17 files changed, 765 insertions(+), 548 deletions(-) create mode 100644 docs/test.tldr delete mode 100644 src/meshes/CylinderMesh.ts delete mode 100644 src/react/Axii.txt delete mode 100644 src/react/Box.txt delete mode 100644 src/react/Cylinder.txt delete mode 100644 src/react/CylinderMesh.txt delete mode 100644 src/react/Grid.txt create mode 100644 src/renderer/renderCylinder.ts rename src/renderer/{sphere.ts => renderSphere.ts} (97%) create mode 100644 workbench/scenes/Cylinders.ts create mode 100644 workbench/scenes/SingleCylinder.ts diff --git a/docs/test.tldr b/docs/test.tldr new file mode 100644 index 0000000..4e4fad5 --- /dev/null +++ b/docs/test.tldr @@ -0,0 +1,383 @@ +{ + "tldrawFileFormatVersion": 1, + "schema": { + "schemaVersion": 1, + "storeVersion": 4, + "recordVersions": { + "asset": { + "version": 1, + "subTypeKey": "type", + "subTypeVersions": { + "image": 2, + "video": 2, + "bookmark": 0 + } + }, + "camera": { + "version": 1 + }, + "document": { + "version": 2 + }, + "instance": { + "version": 17 + }, + "instance_page_state": { + "version": 3 + }, + "page": { + "version": 1 + }, + "shape": { + "version": 3, + "subTypeKey": "type", + "subTypeVersions": { + "group": 0, + "embed": 4, + "bookmark": 1, + "image": 2, + "text": 1, + "draw": 1, + "geo": 7, + "line": 0, + "note": 4, + "frame": 0, + "arrow": 1, + "highlight": 0, + "video": 1 + } + }, + "instance_presence": { + "version": 4 + }, + "pointer": { + "version": 1 + } + } + }, + "records": [ + { + "gridSize": 10, + "name": "", + "meta": {}, + "id": "document:document", + "typeName": "document" + }, + { + "id": "pointer:pointer", + "typeName": "pointer", + "x": 1323.078125, + "y": 743.875, + "lastActivityTimestamp": 1694612082026, + "meta": {} + }, + { + "meta": {}, + "id": "page:BOCl88s28IpD2VrJVSgCf", + "name": "Page 1", + "index": "a1", + "typeName": "page" + }, + { + "x": 0, + "y": 0, + "z": 1, + "meta": {}, + "id": "camera:page:BOCl88s28IpD2VrJVSgCf", + "typeName": "camera" + }, + { + "editingId": null, + "croppingId": null, + "selectedIds": [], + "hoveredId": null, + "erasingIds": [], + "hintingIds": [], + "focusLayerId": null, + "meta": {}, + "id": "instance_page_state:page:BOCl88s28IpD2VrJVSgCf", + "pageId": "page:BOCl88s28IpD2VrJVSgCf", + "typeName": "instance_page_state" + }, + { + "followingUserId": null, + "opacityForNextShape": 1, + "stylesForNextShape": { + "tldraw:geo": "ellipse", + "tldraw:fill": "semi" + }, + "brush": null, + "scribble": null, + "cursor": { + "type": "default", + "color": "black", + "rotation": 0 + }, + "isFocusMode": false, + "exportBackground": true, + "isDebugMode": false, + "isToolLocked": false, + "screenBounds": { + "x": 0, + "y": 0, + "w": 2265, + "h": 1308 + }, + "zoomBrush": null, + "isGridMode": false, + "isPenMode": false, + "chatMessage": "", + "isChatting": false, + "highlightedUserIds": [], + "meta": {}, + "id": "instance:instance", + "currentPageId": "page:BOCl88s28IpD2VrJVSgCf", + "typeName": "instance" + }, + { + "x": 650.796875, + "y": 386.6328125, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:Z96x88IKDjkhGxn0NXPDW", + "type": "geo", + "props": { + "w": 184.109375, + "h": 146.57421875, + "geo": "rectangle", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "Start", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:BOCl88s28IpD2VrJVSgCf", + "index": "a1", + "typeName": "shape" + }, + { + "x": 995.734375, + "y": 352.6640625, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:of1Kr9dzBYlOrolSGLjNN", + "type": "geo", + "props": { + "w": 278.625, + "h": 240.74609375, + "geo": "rectangle", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "Middle", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:BOCl88s28IpD2VrJVSgCf", + "index": "a2", + "typeName": "shape" + }, + { + "x": 744.515625, + "y": 552.5625, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:QjsyMlTJy279E7lRS01sa", + "type": "arrow", + "parentId": "page:BOCl88s28IpD2VrJVSgCf", + "index": "a3", + "props": { + "dash": "draw", + "size": "m", + "fill": "none", + "color": "black", + "labelColor": "black", + "bend": 0, + "start": { + "type": "binding", + "boundShapeId": "shape:Z96x88IKDjkhGxn0NXPDW", + "normalizedAnchor": { + "x": 0.5, + "y": 0.5 + }, + "isExact": false + }, + "end": { + "type": "binding", + "boundShapeId": "shape:of1Kr9dzBYlOrolSGLjNN", + "normalizedAnchor": { + "x": 0.5, + "y": 0.5 + }, + "isExact": false + }, + "arrowheadStart": "none", + "arrowheadEnd": "arrow", + "text": "", + "font": "draw" + }, + "typeName": "shape" + }, + { + "x": 1468.46875, + "y": 437.19921875, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:cXBMkFoK7U62Dbcsj9fw7", + "type": "geo", + "props": { + "w": 278.625, + "h": 240.74609375, + "geo": "rectangle", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "End", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:BOCl88s28IpD2VrJVSgCf", + "index": "a2V", + "typeName": "shape" + }, + { + "x": 1167.6328125, + "y": 420.6953125, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:9O1KB_ryC5dL9ggheEi9g", + "type": "arrow", + "parentId": "page:BOCl88s28IpD2VrJVSgCf", + "index": "a2l", + "props": { + "dash": "draw", + "size": "m", + "fill": "semi", + "color": "black", + "labelColor": "black", + "bend": 0, + "start": { + "type": "binding", + "boundShapeId": "shape:of1Kr9dzBYlOrolSGLjNN", + "normalizedAnchor": { + "x": 0.5, + "y": 0.5 + }, + "isExact": false + }, + "end": { + "type": "binding", + "boundShapeId": "shape:cXBMkFoK7U62Dbcsj9fw7", + "normalizedAnchor": { + "x": 0.5, + "y": 0.5 + }, + "isExact": false + }, + "arrowheadStart": "none", + "arrowheadEnd": "arrow", + "text": "", + "font": "draw" + }, + "typeName": "shape" + }, + { + "x": 994.8359375, + "y": 769.7578125, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:xc8hARLSRwGfnJ3yUzY91", + "type": "geo", + "props": { + "w": 249, + "h": 248.8671875, + "geo": "ellipse", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "Off the beaten path", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:BOCl88s28IpD2VrJVSgCf", + "index": "a4", + "typeName": "shape" + }, + { + "x": 1124.296875, + "y": 522.0078125, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:VmU06a1JHpgle52-BBMLR", + "type": "arrow", + "parentId": "page:BOCl88s28IpD2VrJVSgCf", + "index": "a5", + "props": { + "dash": "draw", + "size": "m", + "fill": "semi", + "color": "black", + "labelColor": "black", + "bend": 0, + "start": { + "type": "binding", + "boundShapeId": "shape:of1Kr9dzBYlOrolSGLjNN", + "normalizedAnchor": { + "x": 0.5, + "y": 0.5 + }, + "isExact": false + }, + "end": { + "type": "binding", + "boundShapeId": "shape:xc8hARLSRwGfnJ3yUzY91", + "normalizedAnchor": { + "x": 0.5, + "y": 0.5 + }, + "isExact": false + }, + "arrowheadStart": "none", + "arrowheadEnd": "arrow", + "text": "", + "font": "draw" + }, + "typeName": "shape" + } + ] +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index dabc09f..8807392 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,6 +13,5 @@ export * from "./shapes/Cylinder"; export * from "./shapes/Sphere"; export * from "./meshes/Mesh"; export * from "./meshes/BoxMesh"; -export * from "./meshes/CylinderMesh"; export * from "./math/Vector3"; export * from "./math/Matrix4x4"; diff --git a/src/meshes/CylinderMesh.ts b/src/meshes/CylinderMesh.ts deleted file mode 100644 index 32d3167..0000000 --- a/src/meshes/CylinderMesh.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Vector3 } from "../math/Vector3"; -import { extrude } from "./Extrude"; - -function circlePolyline(radius: number, segments: number): Vector3[] { - const vertices: Vector3[] = []; - for (let i = 0; i < segments; i++) { - vertices.push( - Vector3( - Math.cos((i / segments) * 2 * Math.PI) * radius, - 0, - Math.sin((i / segments) * 2 * Math.PI) * radius - ) - ); - } - return vertices; -} - -export function CylinderMesh(radius: number, height: number, segments: number) { - return extrude(circlePolyline(radius, segments), height); -} diff --git a/src/react/Axii.txt b/src/react/Axii.txt deleted file mode 100644 index 44d007d..0000000 --- a/src/react/Axii.txt +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; -import { Box } from "./Box"; - -export type AxiiProps = { - x: number; - y: number; - z: number; - scale: number; -}; - -export function Axii(props: AxiiProps) { - const thickness = props.scale / 20.0; - - return ( - - - - - - ); -} diff --git a/src/react/Box.txt b/src/react/Box.txt deleted file mode 100644 index 21be079..0000000 --- a/src/react/Box.txt +++ /dev/null @@ -1,124 +0,0 @@ -import React from "react"; -import { point3DToIsometric } from "./Camera"; - -type BoxProps = { - x: number; - y: number; - z: number; - width: number; - height: number; - depth: number; - fill: string; - stroke: string; -}; - -/* - - Coordinate System - Y - | - | - | - | - / \ - / \ - Z \ X - - Vertices Indices - - 0 - /- - /- \- - /-- \- - /-- \- - 3 /- \- 1 - -- --| - |-\ --/ | - | --\ -/ | - | --\ 2 --/ | - | ---/ | - | | | - | | | - | | | - | | | - 6 - | | - \- | / 4 - \- | /- - \- | /- - \- | /-- - -- - 5 - - - */ - -function generatePolygons({ - width, - height, - depth, -}: BoxProps): Array>>> { - const vertices = [ - // 0,1,2,3 - [-width / 2, +height / 2, -depth / 2], - [+width / 2, +height / 2, -depth / 2], - [+width / 2, +height / 2, +depth / 2], - [-width / 2, +height / 2, +depth / 2], - // 4,5,6 - [+width / 2, -height / 2, -depth / 2], - [+width / 2, -height / 2, depth / 2], - [-width / 2, -height / 2, depth / 2], - ]; - return [ - // Faces - [ - // Right Face (2,1,4,5) - [vertices[3], vertices[2], vertices[5], vertices[6]], - // Front Face - [vertices[2], vertices[1], vertices[4], vertices[5]], - - // Top Face - [vertices[0], vertices[1], vertices[2], vertices[3]], - ], - // Outline - [[]], - ]; -} - -export function Box(props: BoxProps) { - const polygons = generatePolygons(props); - const faces = polygons[0]; - const brightness = [160 / 255, 210 / 255, 255 / 255]; - - return ( - - { - // All faces - faces.map((face, i) => { - let points = ""; - // A face - face.forEach((vertex) => { - const { x, y } = point3DToIsometric( - vertex[0] + props.x, - vertex[1] + props.y, - vertex[2] + props.z - ); - points += `${Math.floor(x)},${Math.floor(y)} `; - }); - // "0,100 50,25 50,75 100,0"; - return ( - - ); - }) - } - - ); -} diff --git a/src/react/Cylinder.txt b/src/react/Cylinder.txt deleted file mode 100644 index 9444de8..0000000 --- a/src/react/Cylinder.txt +++ /dev/null @@ -1,109 +0,0 @@ -import React from "react"; -import { point3DToIsometric } from "./Camera"; -import { generateCylinder } from "./CylinderMesh"; -import { Vector3 } from "./Vector3"; - -type CylinderProps = { - x: number; - y: number; - z: number; - height: number; - radius: number; - fill: string; - stroke: string; - segments: number; -}; - -const directLight = Vector3(1, 1, 0).normalize(); -const ambientLight = 0.4; -const cameraDirection = Vector3(1, 1, 1).normalize(); - -export function Cylinder(props: CylinderProps) { - const mesh = generateCylinder({ - x: props.x, - y: props.y, - z: props.z, - height: props.height, - radius: props.radius, - segments: props.segments, - fill: props.fill, - stroke: props.stroke, - }); - - const bottomFace = mesh.faces[1]; - - const transformedVertices = mesh.vertices.map((vertex) => { - return point3DToIsometric(vertex.x, vertex.y, vertex.z); - }); - - const maxDotPerFace = mesh.faces.map((face) => { - let maxDot = cameraDirection.dotProduct(mesh.vertices[face.indices[0]]); - for (let i = 1; i < face.indices.length; i++) { - maxDot = Math.max( - cameraDirection.dotProduct(mesh.vertices[face.indices[i]]), - maxDot - ); - } - return maxDot; - }); - - // Sort faces by distance from camera - const faceIndices = mesh.faces.map((_, i) => i); - const sortedFaces = faceIndices.sort((faceIndexA, faceIndexB) => { - return maxDotPerFace[faceIndexA] - maxDotPerFace[faceIndexB]; - }); - - return ( - - { - // All faces - sortedFaces.map((faceIndex) => { - const face = mesh.faces[faceIndex]; - let points = ""; - - const brightness = Math.min( - Math.max( - face.normal.dotProduct(directLight) + ambientLight, - ambientLight - ), - 1.0 - ); - - const filter = - bottomFace === face - ? "drop-shadow(0px 0px 7px black)" - : `brightness(${brightness})`; - - face.indices.forEach((index) => { - console.log(faceIndex, index); - points += `${transformedVertices[index].x},${transformedVertices[index].y} `; - }); - return ( - - ); - }) - } - {/* {transformedVertices.map((vertex, i) => ( - - {i} - - ))} */} - - ); -} diff --git a/src/react/CylinderMesh.txt b/src/react/CylinderMesh.txt deleted file mode 100644 index a0bb118..0000000 --- a/src/react/CylinderMesh.txt +++ /dev/null @@ -1,120 +0,0 @@ -import { Mesh, Face } from "./Mesh"; -import { Vector3 } from "./Vector3"; - -/* - - Coordinate System - Y - | - | - | - | - / \ - / \ - Z \ X - - ^ - \_ 0 - \ / - <----/ - - - - - */ - -export function generateCylinder(options: { - x: number; - y: number; - z: number; - radius: number; - height: number; - segments: number; - fill: string; - stroke: string; -}): Mesh { - const mesh: Mesh = { - vertices: [], - faces: [], - }; - - let sideFacesNormals = []; - - // Top face vertices - for (let i = 0; i < options.segments; i++) { - const percent = i / options.segments; - const theta = percent * (Math.PI * 2); - - const normalizedX = Math.cos(theta); - const normalizedZ = Math.sin(theta); - - mesh.vertices.push( - Vector3( - options.x + normalizedX * options.radius, - options.y + options.height / 2, - options.z + normalizedZ * options.radius - ) - ); - } - - // Calculate side faces normals - for (let i = 0; i < options.segments; i++) { - const nextI = (i + 1) % options.segments; - const average = Vector3( - (mesh.vertices[i].x + mesh.vertices[nextI].x) / 2 - options.x, - 0, - (mesh.vertices[i].z + mesh.vertices[nextI].z) / 2 - options.z - ); - average.normalize(); - sideFacesNormals.push(average); - } - - // Bottom face vertices are derived from top face vertices but reversed and z is flipped - const bottomFaceVertices = mesh.vertices.map((vertex) => - Vector3(vertex.x, options.y - options.height / 2.0, vertex.z) - ); - - // Make bottom face vertices clockwise - bottomFaceVertices.reverse(); - mesh.vertices = mesh.vertices.concat(bottomFaceVertices); - - // Generate faces - const topFace: Face = { - indices: [], - fill: options.fill, - stroke: options.stroke, - normal: Vector3(0, 1, 0), - }; - const bottomFace: Face = { - indices: [], - fill: options.fill, - stroke: options.stroke, - normal: Vector3(0, -1, 0), - }; - mesh.faces.push(topFace); - mesh.faces.push(bottomFace); - for (let i = 0; i < options.segments; i++) { - // Top face - topFace.indices.push(i); - // Bottom face - bottomFace.indices.push(i + options.segments); - - // Side faces - const nextI = (i + 1) % options.segments; - const sideFace: Face = { - indices: [ - nextI, - i, - options.segments - 1 - i + options.segments, - options.segments - 1 - nextI + options.segments, - ], - fill: options.fill, - stroke: options.stroke, - normal: sideFacesNormals[i], - }; - - mesh.faces.push(sideFace); - } - - return mesh; -} diff --git a/src/react/Grid.txt b/src/react/Grid.txt deleted file mode 100644 index 2616050..0000000 --- a/src/react/Grid.txt +++ /dev/null @@ -1,87 +0,0 @@ -import React from "react"; -import { point3DToIsometric } from "./Camera"; - -export type GridProps = { - x: number; - y: number; - z: number; - width: number; - depth: number; -}; - -/* - - Coordinate System - Y - | - | - | - | - / \ - / \ - Z \ X - - Vertices Indices - - 0 - /- - /- \- - /-- \- - /-- \- - 3 /- \- 1 - -- --| - -\ --/ - --\ -/ - --\ 2 --/ - ---/ - - */ - -export const GridColor = "#f1f1f1"; - -export function Grid(props: GridProps) { - const gridPoints = [ - [-props.width / 2, 0, -props.depth / 2], - [+props.width / 2, 0, -props.depth / 2], - [+props.width / 2, 0, +props.depth / 2], - [-props.width / 2, 0, +props.depth / 2], - ]; - - let points = ""; - // A face - gridPoints.forEach((vertex) => { - const { x, y } = point3DToIsometric( - vertex[0] + props.x, - vertex[1] + props.y, - vertex[2] + props.z - ); - points += `${Math.floor(x)},${Math.floor(y)} `; - }); - - const floorPolygon = ( - - ); - - return ( - - - - - - - - - {floorPolygon} - - ); -} diff --git a/src/renderer/Renderer.ts b/src/renderer/Renderer.ts index c6829bd..6ad559f 100644 --- a/src/renderer/Renderer.ts +++ b/src/renderer/Renderer.ts @@ -5,8 +5,9 @@ import { Viewport } from "./Viewport"; import { MeshShape, Shape, TransformProperties } from "../shapes/Shape"; import { Matrix4x4 } from "../math/Matrix4x4"; import { applyLighting } from "../lighting/LightingModel"; -import { renderSphere } from "./sphere"; +import { renderSphere } from "./renderSphere"; import { ColorToCSS } from "../colors/Color"; +import { renderCylinder } from "./renderCylinder"; const CrackFillingStrokeWidth = 0.5; @@ -111,6 +112,20 @@ export function render( inverseAndProjectionMatrix ); break; + case "cylinder": + renderCylinder( + scene, + svg, + defs, + shape, + viewport, + worldTransform, + cameraZoom, + cameraDirection, + inverseCameraMatrix, + inverseAndProjectionMatrix + ); + break; default: throw new Error(`Unknown shape type: ${(shape as Shape).type}`); } diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts new file mode 100644 index 0000000..1ae2c07 --- /dev/null +++ b/src/renderer/renderCylinder.ts @@ -0,0 +1,81 @@ +// All of this code is based on this early prototype: +// https://codesandbox.io/s/directionally-lit-sphere-using-svg-radial-gradients-c32ncz?file=/src/Sphere.tsx:2108-4852 +// and this Observable Notebook +// https://observablehq.com/d/011f054fc7eaf966 + +import { projectToScreenCoordinate } from "../cameras/Camera"; +import { ColorToCSS } from "../colors/Color"; +import { applyLighting } from "../lighting/LightingModel"; +import { Matrix4x4 } from "../math/Matrix4x4"; +import { Vector3 } from "../math/Vector3"; +import { CylinderShape } from "../shapes/Shape"; +import { Scene } from "./Scene"; +import { Viewport } from "./Viewport"; + +export function renderCylinder( + _scene: Scene, + svg: SVGElement, + _defs: SVGDefsElement, + cylinder: CylinderShape, + viewport: Viewport, + worldTransform: Matrix4x4, + _cameraZoom: number, + cameraDirection: Vector3, + _inverseCameraMatrix: Matrix4x4, + inverseAndProjectionMatrix: Matrix4x4 +) { + const points: Vector3[] = [ + // Top + Vector3(0, cylinder.height / 2, 0), + // Bottom + Vector3(0, -cylinder.height / 2, 0), + ].map((point) => { + worldTransform.applyToVector3(point); + + return projectToScreenCoordinate( + point, + inverseAndProjectionMatrix, + viewport + ); + }); + + const yAxis = Vector3(0, 1, 0); + worldTransform.extractBasis(Vector3(0, 0, 0), yAxis, Vector3(0, 0, 0)); + + // Top === -1 + // Bottom === 1 + // Front === 0 + console.log(yAxis.dotProduct(cameraDirection)); + + // Scenarios we can view the cylinder from: + // 1. From the top/bottom (can't see the tube) + // 2. From the side (can't see the top or bottom) + // 3. From a diagonal (can see the tube and either the top or bottom) + + // Are we viewing the cylinder from the top or bottom? + + points.forEach(({ x, y }) => { + // Create a 'circle' element + const circle = document.createElementNS( + "http://www.w3.org/2000/svg", + "circle" + ); + + circle.id = "sphere"; + circle.setAttribute("cx", x.toString()); + circle.setAttribute("cy", y.toString()); + + // TODO: Factor in camera projection matrix, this currectly + // ignores all zoom factors. Can we even handle skew with sphere?! + // I don't think we can. + circle.setAttribute("r", "10"); + + circle.setAttribute("fill", ColorToCSS(cylinder.fill)); + + svg.appendChild(circle); + }); + + // Get the center of the cylinder's top face + + // Get the center of the cylinder's bottom face +} diff --git a/src/renderer/sphere.ts b/src/renderer/renderSphere.ts similarity index 97% rename from src/renderer/sphere.ts rename to src/renderer/renderSphere.ts index c91f906..966dc69 100644 --- a/src/renderer/sphere.ts +++ b/src/renderer/renderSphere.ts @@ -242,9 +242,6 @@ function sphereLightSide( circle.setAttribute("cx", x.toString()); circle.setAttribute("cy", y.toString()); - // TODO: Factor in camera projection matrix, this currectly - // ignores all zoom factors. Can we even handle skew with sphere?! - // I don't think we can. circle.setAttribute("r", Radius.toString()); circle.setAttribute("fill", fillUrl); @@ -424,9 +421,6 @@ function sphereDarkSide( circle.setAttribute("cx", x.toString()); circle.setAttribute("cy", y.toString()); - // TODO: Factor in camera projection matrix, this currectly - // ignores all zoom factors. Can we even handle skew with sphere?! - // I don't think we can. circle.setAttribute("r", Radius.toString()); circle.setAttribute("fill", fillUrl); diff --git a/src/shapes/Cylinder.ts b/src/shapes/Cylinder.ts index b86e5c6..54de89f 100644 --- a/src/shapes/Cylinder.ts +++ b/src/shapes/Cylinder.ts @@ -1,44 +1,26 @@ import { BasicShapeProperties, - DefaultShapeDimension, DefaultBasicShapeProperties, - Shape, + DefaultShapeDimension, + CylinderShape, } from "./Shape"; -import { CylinderMesh } from "../meshes/CylinderMesh"; export type CylinderProperties = { - segments: number; radius: number; height: number; -}; +} & BasicShapeProperties; -const DefaultCylinderProperties: CylinderProperties & { id: string } = { - segments: 32, +const DefaultSphereProperties: CylinderProperties = { radius: DefaultShapeDimension / 2, height: DefaultShapeDimension, - id: "cylinder", + ...DefaultBasicShapeProperties(), }; -export function Cylinder( - props: Partial -): Shape { - const meshParams: CylinderProperties = { - segments: props.segments || DefaultCylinderProperties.segments, - radius: props.radius || DefaultCylinderProperties.radius, - height: props.height || DefaultCylinderProperties.height, - }; - - const cylinder: Shape = { - type: "mesh", - mesh: CylinderMesh( - meshParams.radius, - meshParams.height, - meshParams.segments - ), - ...DefaultBasicShapeProperties(), - id: props.id || DefaultCylinderProperties.id, +export function Cylinder(props: Partial): CylinderShape { + const cylinder: CylinderShape = { + type: "cylinder", + ...DefaultSphereProperties, ...props, }; - return cylinder; } diff --git a/src/shapes/Shape.ts b/src/shapes/Shape.ts index a891ac6..2d06df0 100644 --- a/src/shapes/Shape.ts +++ b/src/shapes/Shape.ts @@ -41,6 +41,12 @@ export type SphereShape = { radius: number; } & BasicShapeProperties; +export type CylinderShape = { + type: "cylinder"; + radius: number; + height: number; +} & BasicShapeProperties; + export type GroupShape = TransformProperties & { type: "group"; id: string; @@ -55,4 +61,9 @@ export type GridShape = BasicShapeProperties & { cellSize: number; }; -export type Shape = MeshShape | SphereShape | GroupShape | GridShape; +export type Shape = + | MeshShape + | SphereShape + | CylinderShape + | GroupShape + | GridShape; diff --git a/workbench/main.ts b/workbench/main.ts index edd6a62..1ebb03f 100644 --- a/workbench/main.ts +++ b/workbench/main.ts @@ -6,12 +6,16 @@ import Spheres from "./scenes/Spheres"; import SingleSphere from "./scenes/SingleSphere"; import Worm from "./scenes/Worm"; import { getPaused, setPaused } from "./Settings"; +import Cylinders from "./scenes/Cylinders"; +import SingleCylinder from "./scenes/SingleCylinder"; // KitchenSink(); // Transforms(); // Octopus(); -Spheres(); +// Spheres(); +// Cylinders(); // SingleSphere(); +SingleCylinder(); // Worm(); document diff --git a/workbench/scenes/Cylinders.ts b/workbench/scenes/Cylinders.ts new file mode 100644 index 0000000..b989934 --- /dev/null +++ b/workbench/scenes/Cylinders.ts @@ -0,0 +1,114 @@ +import { + Scene, + Vector3, + Box, + Sphere, + Cylinder, + render, + Group, + Grid, + Color, +} from "../../src/index"; +import { Axii } from "../Axii"; +import { + getCamera, + getEnvironment, + getLighting, + getPaused, + onUpdate, +} from "../Settings"; + +const scenarios: [Vector3, string][] = [ + [Vector3(-1, -1, -3), "From Up, Right, and in Front"], + [Vector3(-1, -1, 3), "From Up, Right, and in Back"], + [Vector3(0, 0, -1), "From Front"], + [Vector3(0, 0, 1), "From Back"], + [Vector3(-1, 0, 0), "From Right"], + [Vector3(1, 0, 0), "From Left"], + [Vector3(-1, 0, 1), "From Right Behind"], + [Vector3(1, 0, 1), "From Left Behind"], + [Vector3(0, -1, 1), "From Top Behind"], + [Vector3(0, 1, -1), "From Bottom Front"], + [Vector3(0, 1, 1), "From Bottom Behind"], + [Vector3(-1, 0, 0.0001), "From Right Just Behind"], +]; + +export default function () { + const viewportScale = 1 / Math.floor(Math.sqrt(scenarios.length)); + + scenarios.forEach(([lightDirection, title]) => { + addCylinderScene(lightDirection, title); + }); +} + +function addCylinderScene(lightDirection: Vector3, title: string) { + const container = document.createElement("div"); + container.innerHTML = `

${title}

`; + container.style.display = "inline-block"; + const svgContainer = document.createElement("div"); + // container.style.transform = "translate(-50%, -50%) scale(2)"; //`translate(${scale},${scale}) scale(${scale})`; + svgContainer.style.display = "inline-block"; + + const { viewport, camera, updateCamera } = getCamera("front", 1); + + function resize() { + const viewportScale = 1 / Math.ceil(Math.sqrt(scenarios.length) * 1.5); + + svgContainer.style.width = + Math.floor(window.innerWidth * viewportScale - 1) + "px"; + svgContainer.style.height = + Math.floor(window.innerWidth * viewportScale - 1) + "px"; + + viewport.height = viewport.width; + + const cameraZoom = (viewport.width / 100) * 0.9; + camera.projectionMatrix.makeOrthographic( + 0, + viewport.width / cameraZoom, + 0, + viewport.height / cameraZoom, + 0, + 10000 + ); + } + resize(); + window.addEventListener("resize", resize); + + svgContainer.style.transform = `translate(0%,0%)`; //`translate(${scale},${scale}) scale(${scale})`; + svgContainer.className = "scene 2"; + container.appendChild(svgContainer); + + lightDirection.normalize(); + + const lightRadius = 15; + + const lightBall = Sphere({ + radius: lightRadius / 4, + fill: Color(255, 255, 0, 0), + stroke: Color(255, 255, 0), + strokeWidth: lightRadius / 2, + }); + lightBall.position = lightDirection.clone().multiply(-70); + + const cylinder = Cylinder({ id: title, strokeWidth: 0, height: 100 }); + const scene: Scene = { + ...getLighting("moonlit"), + shapes: [ + getEnvironment(), + // Axii(Vector3(-sphere.radius * 2, 0, 0)), + cylinder, + lightBall, + ], + }; + + scene.directionalLight.direction = lightDirection; + + onUpdate(({ now, deltaTime }) => { + const cameraSpeed = 0.0; + + updateCamera(now * cameraSpeed * 360 + 45, 20); + + render(svgContainer, scene, viewport, camera); + document.getElementById("root")!.appendChild(container); + }); +} diff --git a/workbench/scenes/KitchenSink.ts b/workbench/scenes/KitchenSink.ts index 71e59da..17027c5 100644 --- a/workbench/scenes/KitchenSink.ts +++ b/workbench/scenes/KitchenSink.ts @@ -104,7 +104,6 @@ export default function () { scale: 1.0, radius: 50, height: 300, - segments: 180, fill: Color(255, 0, 255), stroke: Color(0, 0, 0), strokeWidth: 0, @@ -171,7 +170,6 @@ export default function () { scale: 1.0, radius: 55, height: 1, - segments: 180, fill: Color(0, 0, 0, 0.5), stroke: Color(0, 0, 0, 0), strokeWidth: 0.0, @@ -241,7 +239,6 @@ export default function () { // scale: 1.0, // radius: 55, // height: 1, - // segments: 180, // fill: Color(0, 0, 0, 0.5), // stroke: Color(0, 0, 0, 0), // strokeWidth: 0.0, diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts new file mode 100644 index 0000000..f23e834 --- /dev/null +++ b/workbench/scenes/SingleCylinder.ts @@ -0,0 +1,145 @@ +import { + Scene, + Vector3, + Box, + Sphere, + Cylinder, + render, + Group, + Grid, + Color, +} from "../../src/index"; +import { + getCamera, + getEnvironment, + getLighting, + getPaused, + onUpdate, +} from "../Settings"; +import { Axii } from "../Axii"; +import { type } from "os"; + +export default function () { + const referenceRadius = 75; + + const lightSpeed = 0.3; + const lightDistance = 100; + const lightSphere = Sphere({ + // id: "light", + radius: 5, + fill: Color(255, 255, 0, 0), + stroke: Color(255, 255, 0), + strokeWidth: 10, + }); + + const position = Vector3(0, referenceRadius / 2, 0); + + const scene: Scene = { + ...getLighting("reference"), + shapes: [ + getEnvironment("grid"), + // Axii(Vector3(-referenceRadius * 3, 0, 0)), + // Group({ + // position: Vector3(0, 0, 0), + // rotation: Vector3(45, 0, 0), + // scale: 3, + // children: [ + Cylinder({ + id: "reference", + position, + radius: referenceRadius, + fill: Color(255, 0, 0), + stroke: Color(0, 0, 0), + strokeWidth: 0, + }), + // ], + // }), + lightSphere, + ], + }; + + lightSphere.position = Vector3(1, 1, -1); + + const { viewport, camera, updateCamera } = getCamera("front"); + + const onPointerEvent = (event: PointerEvent) => { + // return; + event.preventDefault(); + event.stopPropagation(); + + const centerX = window.innerWidth / 2; + const centerY = window.innerHeight / 2; + const diffX = event.clientX - centerX; + const diffY = event.clientY - centerY; + const distance = Math.sqrt(diffX * diffX + diffY * diffY); + + const distanceNormalized = distance / referenceRadius; + let degrees = distanceNormalized * 90; + + //Math.cos(((distanceNormalized * 90) / 180) * Math.PI); + // console.log( + // degrees, + // event.clientX, + // event.clientY, + // centerX, + // centerY, + // diffX, + // diffY, + // distance, + // distanceNormalized + // ); + + const spinMode: string = "z"; + + if (spinMode === "y") { + if (diffX < 0) { + degrees *= -1; + } + lightSphere.position.x = Math.sin((degrees / 180) * Math.PI); + // lightSphere.position.y = 0.0; + lightSphere.position.y = 0.5; + lightSphere.position.z = Math.cos((degrees / 180) * Math.PI); + + if (event.buttons === 1) { + console.log(); + lightSphere.position.z *= -1; + } + } else if (spinMode === "z") { + lightSphere.position.x = Math.sin((degrees / 180) * Math.PI); + lightSphere.position.y = Math.cos((degrees / 180) * Math.PI); + lightSphere.position.z = 0; // + // lightSphere.position.z = -0.5; // + } + + lightSphere.position.normalize().multiply(lightDistance).add(position); + + // const x = event.clientX; + // const z = event.clientY; + // lightSphere.position.y = 0; + // const x = event.clientX; + // const y = event.clientY; + }; + document.addEventListener("pointerdown", onPointerEvent); + document.addEventListener("pointermove", onPointerEvent); + document.addEventListener("pointerup", onPointerEvent); + + onUpdate(({ now, deltaTime }) => { + const cameraSpeed = 0.1; + // const cameraSpeed = 0.0; + updateCamera(now * cameraSpeed * 360 + 45, 20); + // updateCamera(45, 20); + + // lightSphere.position.x = + // Math.sin(now * Math.PI * 2 * lightSpeed) * lightDistance; + // lightSphere.position.y = 0; + // lightSphere.position.z = + // Math.cos(now * Math.PI * 2 * lightSpeed) * lightDistance; + + scene.directionalLight.direction = lightSphere.position + .clone() + .normalize() + .multiply(-1); + + render(document.getElementById("root")!, scene, viewport, camera); + }); +} From 4827d341bac70f7d6ac2954e66fa84bf80463a15 Mon Sep 17 00:00:00 2001 From: Francois Date: Wed, 20 Sep 2023 15:44:20 -0400 Subject: [PATCH 02/20] More cylinder with linear gradients work. Drew up diagrams of what the work is --- docs/cylinders.tldr | 802 +++++++++++++++++++++++++++ docs/{overview.tldr => spheres.tldr} | 475 +--------------- docs/test.tldr | 383 ------------- src/renderer/renderCylinder.ts | 5 + workbench/scenes/SingleCylinder.ts | 2 +- 5 files changed, 820 insertions(+), 847 deletions(-) create mode 100644 docs/cylinders.tldr rename docs/{overview.tldr => spheres.tldr} (95%) delete mode 100644 docs/test.tldr diff --git a/docs/cylinders.tldr b/docs/cylinders.tldr new file mode 100644 index 0000000..d67b319 --- /dev/null +++ b/docs/cylinders.tldr @@ -0,0 +1,802 @@ +{ + "tldrawFileFormatVersion": 1, + "schema": { + "schemaVersion": 1, + "storeVersion": 4, + "recordVersions": { + "asset": { + "version": 1, + "subTypeKey": "type", + "subTypeVersions": { + "image": 2, + "video": 2, + "bookmark": 0 + } + }, + "camera": { + "version": 1 + }, + "document": { + "version": 2 + }, + "instance": { + "version": 17 + }, + "instance_page_state": { + "version": 3 + }, + "page": { + "version": 1 + }, + "shape": { + "version": 3, + "subTypeKey": "type", + "subTypeVersions": { + "group": 0, + "embed": 4, + "bookmark": 1, + "image": 2, + "text": 1, + "draw": 1, + "geo": 7, + "line": 0, + "note": 4, + "frame": 0, + "arrow": 1, + "highlight": 0, + "video": 1 + } + }, + "instance_presence": { + "version": 4 + }, + "pointer": { + "version": 1 + } + } + }, + "records": [ + { + "gridSize": 10, + "name": "", + "meta": {}, + "id": "document:document", + "typeName": "document" + }, + { + "meta": {}, + "id": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "name": "Page 1", + "index": "a1", + "typeName": "page" + }, + { + "id": "pointer:pointer", + "typeName": "pointer", + "x": 773.1827019043085, + "y": -2307.7631842089286, + "lastActivityTimestamp": 1695235993865, + "meta": {} + }, + { + "followingUserId": null, + "opacityForNextShape": 1, + "stylesForNextShape": { + "tldraw:geo": "ellipse", + "tldraw:fill": "solid", + "tldraw:dash": "draw", + "tldraw:color": "grey", + "tldraw:size": "xl" + }, + "brush": null, + "scribble": null, + "cursor": { + "type": "default", + "color": "black", + "rotation": 0 + }, + "isFocusMode": false, + "exportBackground": true, + "isDebugMode": false, + "isToolLocked": false, + "screenBounds": { + "x": 0, + "y": 0, + "w": 1720, + "h": 1065 + }, + "zoomBrush": null, + "isGridMode": false, + "isPenMode": false, + "chatMessage": "", + "isChatting": false, + "highlightedUserIds": [], + "meta": {}, + "id": "instance:instance", + "currentPageId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "typeName": "instance" + }, + { + "editingId": null, + "croppingId": null, + "selectedIds": [], + "hoveredId": null, + "erasingIds": [], + "hintingIds": [], + "focusLayerId": null, + "meta": {}, + "id": "instance_page_state:page:uEZU1HSz7SqZ2Uxqq6Zuo", + "pageId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "typeName": "instance_page_state" + }, + { + "x": 3296.1532355956915, + "y": 4784.585999150335, + "z": 0.1, + "meta": {}, + "id": "camera:page:uEZU1HSz7SqZ2Uxqq6Zuo", + "typeName": "camera" + }, + { + "x": 3858.5470331978095, + "y": -1372.462245270935, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "type": "text", + "props": { + "color": "black", + "size": "xl", + "w": 215.8984375, + "text": "Scenarios", + "font": "draw", + "align": "middle", + "autoSize": true, + "scale": 3.252738929090746 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "aP", + "id": "shape:7RolEC3m4rJk4jn5-CAE4", + "typeName": "shape" + }, + { + "x": 2366.5432332143587, + "y": -332.016114953992, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "type": "text", + "props": { + "color": "black", + "size": "m", + "w": 25.1015625, + "text": "-X", + "font": "sans", + "align": "middle", + "autoSize": true, + "scale": 1.2830224378840631 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "aI", + "id": "shape:tu0K2uUZxn5A2oxnAuC_f", + "typeName": "shape" + }, + { + "x": 87.48047865185384, + "y": -1358.852479615269, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "type": "text", + "props": { + "color": "black", + "size": "xl", + "w": 1446.350694438507, + "text": "Coordinate Systems", + "font": "draw", + "align": "middle", + "autoSize": true, + "scale": 3.252738929090746 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "aPV", + "id": "shape:S928xs5O2UINqRJ4QevDP", + "typeName": "shape" + }, + { + "x": 7591.861850225016, + "y": -42.01651732141181, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "type": "image", + "props": { + "w": 6866.369673402156, + "h": 731.0203454572638, + "assetId": "asset:814849268", + "playing": true, + "url": "", + "crop": null + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "au", + "id": "shape:LQ7VYHfT_59lkzS-mOGnD", + "typeName": "shape" + }, + { + "x": 348.75694983770563, + "y": -873.4659494540831, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "type": "image", + "props": { + "w": 952.8005305002758, + "h": 844.8660954045414, + "assetId": "asset:8475689", + "playing": true, + "url": "", + "crop": null + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "aw", + "id": "shape:AQzu5e64eKuhuVxH4SdfJ", + "typeName": "shape" + }, + { + "x": 2980.7525610453717, + "y": -550.3093653822234, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:IjmZGGAMExMSzcUWacvS0", + "type": "geo", + "props": { + "w": 444.36654882128096, + "h": 1164.652194524181, + "geo": "rectangle", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "ax", + "typeName": "shape" + }, + { + "x": 3690.8819292540693, + "y": -331.73819635991754, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:Fc6bD2du9uFks5l3nqnaL", + "type": "geo", + "props": { + "w": 488.7984291145008, + "h": 488.7984291145008, + "geo": "ellipse", + "color": "black", + "labelColor": "black", + "fill": "solid", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "ay", + "typeName": "shape" + }, + { + "x": 0.23878404765400774, + "y": 158.11281483310268, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:vKGg_ZO4T0xqrJwEfYV7l", + "type": "geo", + "props": { + "w": 473.52385375144695, + "h": 1032.5372595488209, + "geo": "rectangle", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "shape:w5gNAqCLUoJVqtvGBogvl", + "index": "a1", + "typeName": "shape" + }, + { + "x": -9.094947017729282e-13, + "y": -4.547473508864641e-13, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:2cdT5p8JrrciZOjXCzX8M", + "type": "geo", + "props": { + "w": 475.4490015797892, + "h": 282.081309634055, + "geo": "ellipse", + "color": "black", + "labelColor": "black", + "fill": "solid", + "dash": "dashed", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "shape:w5gNAqCLUoJVqtvGBogvl", + "index": "a2", + "typeName": "shape" + }, + { + "x": 2.1588002942544335, + "y": 727.6686127339904, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:sOMQZZel9vnX4Etlset7o", + "type": "image", + "props": { + "w": 468.53327820317276, + "h": 468.53327820317276, + "assetId": "asset:1151615746", + "playing": true, + "url": "", + "crop": null + }, + "parentId": "shape:w5gNAqCLUoJVqtvGBogvl", + "index": "a4", + "typeName": "shape" + }, + { + "x": 0.39714217349956016, + "y": 1054.8683325412799, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:wOhIGOyU6S9doZjnO7cVU", + "type": "geo", + "props": { + "w": 475.4490015797892, + "h": 282.081309634055, + "geo": "ellipse", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "shape:w5gNAqCLUoJVqtvGBogvl", + "index": "a3", + "typeName": "shape" + }, + { + "x": 5884.552384773063, + "y": 490.1435920196451, + "rotation": 3.124139361069851, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:fzPp09k2Qt7VHNYKth32W", + "type": "geo", + "props": { + "w": 473.52385375144695, + "h": 1032.5372595488209, + "geo": "rectangle", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b038", + "typeName": "shape" + }, + { + "x": 5887.550581560161, + "y": 648.2281581489623, + "rotation": 3.124139361069851, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:APrjsUKRFoccLczrzHJcW", + "type": "geo", + "props": { + "w": 475.4490015797892, + "h": 282.081309634055, + "geo": "ellipse", + "color": "black", + "labelColor": "black", + "fill": "solid", + "dash": "dashed", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b03G", + "typeName": "shape" + }, + { + "x": 5872.692541680559, + "y": -79.29195087061487, + "rotation": 3.124139361069851, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:sdZx3nc_EwfFUaA8095CX", + "type": "image", + "props": { + "w": 468.53327820317276, + "h": 468.53327820317276, + "assetId": "asset:1151615746", + "playing": true, + "url": "", + "crop": null + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b03l", + "typeName": "shape" + }, + { + "x": 5868.743508996007, + "y": -406.47258174927737, + "rotation": 3.124139361069851, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:eXL3GnmxAt9eoxQvo-U88", + "type": "geo", + "props": { + "w": 475.4490015797892, + "h": 282.081309634055, + "geo": "ellipse", + "color": "black", + "labelColor": "black", + "fill": "semi", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b03V", + "typeName": "shape" + }, + { + "x": 2982.2895389886444, + "y": -782.2091382395772, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:vaHxHh6pSpFP6tdcPitPg", + "type": "text", + "props": { + "color": "black", + "size": "xl", + "w": 221.2669219970703, + "text": "From Side", + "font": "draw", + "align": "middle", + "autoSize": true, + "scale": 1.8297611929228117 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b04", + "typeName": "shape" + }, + { + "x": 3722.1463530613637, + "y": -797.32841073072, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:34HMB1Cv3dxBFhGVgdKrH", + "type": "text", + "props": { + "color": "black", + "size": "xl", + "w": 375.07245453053696, + "text": "From Top", + "font": "draw", + "align": "middle", + "autoSize": true, + "scale": 1.8297611929228117 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b05", + "typeName": "shape" + }, + { + "x": 4454.33027664319, + "y": -963.3078028504594, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:741R1AM4WwU_yVoM0Bn-P", + "type": "text", + "props": { + "color": "black", + "size": "xl", + "w": 488.431878435833, + "text": "Angled \nFrom Above", + "font": "draw", + "align": "middle", + "autoSize": true, + "scale": 1.8297611929228117 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b06", + "typeName": "shape" + }, + { + "x": 4455.743382039469, + "y": -677.1986768240918, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:w5gNAqCLUoJVqtvGBogvl", + "type": "group", + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b02", + "props": {}, + "typeName": "shape" + }, + { + "x": 5388.4972957386335, + "y": -981.1381280595376, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:4ZX1sFKLXVKzXqv1t38no", + "type": "text", + "props": { + "color": "black", + "size": "xl", + "w": 478.68742846960436, + "text": "Angled \nFrom Below", + "font": "draw", + "align": "middle", + "autoSize": true, + "scale": 1.8297611929228117 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b07", + "typeName": "shape" + }, + { + "x": 7722.063997502218, + "y": -1050.236113218834, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:G_47b0sfuUUf5_vjQWdVe", + "type": "image", + "props": { + "w": 1352.2116903743579, + "h": 614.3381506885971, + "assetId": "asset:1338420211", + "playing": true, + "url": "", + "crop": null + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b08", + "typeName": "shape" + }, + { + "x": 9247.632871314963, + "y": -985.7024215698013, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:fQCgjcXEwXUPcY2HuJpCF", + "type": "image", + "props": { + "w": 1618.01170459689, + "h": 625.7694840428144, + "assetId": "asset:-1438593003", + "playing": true, + "url": "", + "crop": null + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b09", + "typeName": "shape" + }, + { + "x": 11127.309714090754, + "y": -1104.7579472038265, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:lpSC9yEOtgOKGwmROePFh", + "type": "image", + "props": { + "w": 720.145143970468, + "h": 686.0206191744817, + "assetId": "asset:43572479", + "playing": true, + "url": "", + "crop": null + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b0A", + "typeName": "shape" + }, + { + "x": 8610.659962213733, + "y": -1428.3187271738625, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:BE4q-5sIZwZkndABcLO3T", + "type": "text", + "props": { + "color": "black", + "size": "xl", + "w": 793.1430838033111, + "text": "References", + "font": "draw", + "align": "middle", + "autoSize": true, + "scale": 3.252738929090746 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "aQ", + "typeName": "shape" + }, + { + "type": "image", + "props": { + "name": "sine-cosine-graph.svg", + "src": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ29weXJpZ2h0IDIwMTcgbWF0aHNpc2Z1bi5jb20gLS0+Cgo8c3ZnCiAgIHdpZHRoPSI0MDQuOSIKICAgaGVpZ2h0PSIxODMuNiIKICAgdmVyc2lvbj0iMS4xIgogICBzdHlsZT0iZm9udC1mYW1pbHk6J0NvbWljIFNhbnMgTVMnO2ZvbnQtc2l6ZToxNC43cHg7c3Ryb2tlLXdpZHRoOjAuMzciCiAgIGlkPSJzdmcyNTUiCiAgIHNvZGlwb2RpOmRvY25hbWU9InNpbmUtY29zaW5lLWdyYXBoLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4xIChjNjhlMjJjMzg3LCAyMDIxLTA1LTIzKSIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJuYW1lZHZpZXcyNTciCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMjU1IgogICAgIGlua3NjYXBlOnNuYXAtZ2xvYmFsPSJmYWxzZSIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzNSI+CiAgICA8bWFya2VyCiAgICAgICBpZD0iaWQyNCIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgb3JpZW50PSJhdXRvIj4KICAgICAgPHBhdGgKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNCwwLDAsLTAuNCwtNCwwKSIKICAgICAgICAgc3R5bGU9InN0cm9rZTpibGFjaztzdHJva2Utd2lkdGg6MXB0IgogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IFoiCiAgICAgICAgIGlkPSJwYXRoMiIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICBpZD0iaWQyNDc4MzkiCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJpZDI0NzgzOSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjQsMCwwLC0wLjQsLTQsMCkiCiAgICAgICAgIHN0eWxlPSJzdHJva2U6IzIwNGE4NztzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjE7ZmlsbDojMjA0YTg3IgogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IFoiCiAgICAgICAgIGlkPSJwYXRoMjk5MyIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICBpZD0iaWQyNDEyODMiCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJpZDI0MTI4MyI+CiAgICAgIDxwYXRoCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjQsMCwwLC0wLjQsLTQsMCkiCiAgICAgICAgIHN0eWxlPSJzdHJva2U6IzIwNGE4NztzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjE7ZmlsbDojMjA0YTg3IgogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IFoiCiAgICAgICAgIGlkPSJwYXRoMjk5NiIgLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTI3LjAxMjgsLTU2LjQzNjYpIgogICAgIGlkPSJnNyIgLz4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMzcwODE1LC0yNy4wMTI4LC01Ni40MzY2KSIKICAgICBpZD0iZzExIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ic3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEiCiAgICAgICBkPSJtIDE3Nyw1MzEgaCA5NDYiCiAgICAgICBpZD0icGF0aDkiIC8+CiAgPC9nPgogIDx0ZXh0CiAgICAgeD0iMjkuNCIKICAgICB5PSIxNDUuMyIKICAgICBzdHlsZT0idGV4dC1hbGlnbjplbmQ7dGV4dC1hbmNob3I6ZW5kO2ZvbnQtc2l6ZToxNnB4O2ZpbGw6IzM0NjVhNCIKICAgICBpZD0idGV4dDEzIj4gLTEgPC90ZXh0PgogIDxnCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6Izk5OTk5OTtzdHJva2Utd2lkdGg6MSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTI3LjAxMjgsLTU2LjQzNjYpIgogICAgIGlkPSJnMTciPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJzdHJva2U6Izk5OTk5OTtzdHJva2Utd2lkdGg6MSIKICAgICAgIGQ9Im0gMTc3LDQ1MSBoIDk0NiIKICAgICAgIGlkPSJwYXRoMTUiIC8+CiAgPC9nPgogIDx0ZXh0CiAgICAgeD0iMjkuNCIKICAgICB5PSIxMTUuNiIKICAgICBzdHlsZT0idGV4dC1hbGlnbjplbmQ7dGV4dC1hbmNob3I6ZW5kO2ZvbnQtc2l6ZToxNnB4O2ZpbGw6IzM0NjVhNCIKICAgICBpZD0idGV4dDE5Ij4gLTAuNSA8L3RleHQ+CiAgPGcKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjEiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMzcwODE1LC0yNy4wMTI4LC01Ni40MzY2KSIKICAgICBpZD0iZzIzIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ic3Ryb2tlLXdpZHRoOjEiCiAgICAgICBkPSJtIDE3NywzNzEgaCA5NDYiCiAgICAgICBpZD0icGF0aDIxIiAvPgogIDwvZz4KICA8dGV4dAogICAgIHg9IjI5LjQiCiAgICAgeT0iODYiCiAgICAgc3R5bGU9InRleHQtYWxpZ246ZW5kO3RleHQtYW5jaG9yOmVuZDtmb250LXNpemU6MTZweDtmaWxsOiMzNDY1YTQiCiAgICAgaWQ9InRleHQyNSI+IDAgPC90ZXh0PgogIDxnCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6Izk5OTk5OTtzdHJva2Utd2lkdGg6MSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTI3LjAxMjgsLTU2LjQzNjYpIgogICAgIGlkPSJnMjkiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJzdHJva2U6Izk5OTk5OTtzdHJva2Utd2lkdGg6MSIKICAgICAgIGQ9Im0gMTc3LDI5MSBoIDk0NiIKICAgICAgIGlkPSJwYXRoMjciIC8+CiAgPC9nPgogIDx0ZXh0CiAgICAgeD0iMjkuNCIKICAgICB5PSI1Ni4zIgogICAgIHN0eWxlPSJ0ZXh0LWFsaWduOmVuZDt0ZXh0LWFuY2hvcjplbmQ7Zm9udC1zaXplOjE2cHg7ZmlsbDojMzQ2NWE0IgogICAgIGlkPSJ0ZXh0MzEiPiAwLjUgPC90ZXh0PgogIDxnCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6Izk5OTk5OTtzdHJva2Utd2lkdGg6MSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTI3LjAxMjgsLTU2LjQzNjYpIgogICAgIGlkPSJnMzUiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJzdHJva2U6Izk5OTk5OTtzdHJva2Utd2lkdGg6MSIKICAgICAgIGQ9Im0gMTc3LDIxMCBoIDk0NiIKICAgICAgIGlkPSJwYXRoMzMiIC8+CiAgPC9nPgogIDx0ZXh0CiAgICAgeD0iMjkuNCIKICAgICB5PSIyNi4zIgogICAgIHN0eWxlPSJ0ZXh0LWFsaWduOmVuZDt0ZXh0LWFuY2hvcjplbmQ7Zm9udC1zaXplOjE2cHg7ZmlsbDojMzQ2NWE0IgogICAgIGlkPSJ0ZXh0MzciPiAxIDwvdGV4dD4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMjA0MjYxLC0xNC4zMzg0LDEwLjk4KSIKICAgICBpZD0iZzQxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ic3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgICBkPSJNIDI4Niw2OTIgViA1MCIKICAgICAgIGlkPSJwYXRoMzkiIC8+CiAgPC9nPgogIDx0ZXh0CiAgICAgeD0iOTEuOCIKICAgICB5PSIxNjcuNiIKICAgICBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGw6IzIwNGE4NyIKICAgICBpZD0idGV4dDQzIj4gLTPPgC8yIDwvdGV4dD4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMjA0MjYxLC0xNy43OTM5LDEwLjk4KSIKICAgICBpZD0iZzQ3Ij4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ic3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgICBkPSJNIDQwNyw2OTIgViA1MCIKICAgICAgIGlkPSJwYXRoNDUiIC8+CiAgPC9nPgogIDx0ZXh0CiAgICAgeD0iMTMzLjMiCiAgICAgeT0iMTY3LjYiCiAgICAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiMyMDRhODciCiAgICAgaWQ9InRleHQ0OSI+IC3PgCA8L3RleHQ+CiAgPGcKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5OTk5O3N0cm9rZS13aWR0aDoxLjM1IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzcwODE1LDAsMCwwLjIwNDI2MSwtMjIuOTc4MywxMS4yOTc4KSIKICAgICBpZD0iZzUzIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ic3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgICBkPSJNIDUyOSw2OTIgViA1MCIKICAgICAgIGlkPSJwYXRoNTEiIC8+CiAgPC9nPgogIDx0ZXh0CiAgICAgeD0iMTczLjMiCiAgICAgeT0iMTY3LjYiCiAgICAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiMyMDRhODciCiAgICAgaWQ9InRleHQ1NSI+IC3PgC8yIDwvdGV4dD4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MS4zNSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4yMDQyNjEsLTI3LjAxMjgsMTEuMjk3OCkiCiAgICAgaWQ9Imc1OSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDoxLjM1IgogICAgICAgZD0iTSA2NTAsNjkyIFYgNTAiCiAgICAgICBpZD0icGF0aDU3IiAvPgogIDwvZz4KICA8dGV4dAogICAgIHg9IjIxNC43IgogICAgIHk9IjE2Ny42IgogICAgIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWFuY2hvcjptaWRkbGU7ZmlsbDojMjA0YTg3IgogICAgIGlkPSJ0ZXh0NjEiPiAwIDwvdGV4dD4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMjA0MjYxLC0zMC45NzcyLDExLjI5NzgpIgogICAgIGlkPSJnNjUiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJzdHJva2U6Izk5OTk5OTtzdHJva2Utd2lkdGg6MS4zNSIKICAgICAgIGQ9Ik0gNzcxLDY5MiBWIDUwIgogICAgICAgaWQ9InBhdGg2MyIgLz4KICA8L2c+CiAgPHRleHQKICAgICB4PSIyNTUiCiAgICAgeT0iMTY3LjYiCiAgICAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiMyMDRhODciCiAgICAgaWQ9InRleHQ2NyI+IM+ALzI8L3RleHQ+CiAgPHRleHQKICAgICB4PSIyOTUiCiAgICAgeT0iMTY3LjYiCiAgICAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiMyMDRhODciCiAgICAgaWQ9InRleHQ2OSI+IM+AIDwvdGV4dD4KICA8dGV4dAogICAgIHg9IjMzNS45IgogICAgIHk9IjE2Ny42IgogICAgIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWFuY2hvcjptaWRkbGU7ZmlsbDojMjA0YTg3IgogICAgIGlkPSJ0ZXh0NzEiPiAzz4AvMiA8L3RleHQ+CiAgPGcKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjQiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMzcwODE1LC0yNy4wMTI4LC01Ni40MzY2KSIKICAgICBpZD0iZzczIiAvPgogIDxnCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDo0IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzcwODE1LDAsMCwwLjM3MDgxNSwtMjcuMDEyOCwtNTYuNDM2NikiCiAgICAgaWQ9Imc3NSIgLz4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6NCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTI3LjAxMjgsLTU2LjQzNjYpIgogICAgIGlkPSJnNzkiIC8+CiAgPHRleHQKICAgICB4PSIzNzUuOSIKICAgICB5PSIxNjgiCiAgICAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiMyMDRhODciCiAgICAgaWQ9InRleHQ4MSI+IDLPgCA8L3RleHQ+CiAgPGcKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5OTk5O3N0cm9rZS13aWR0aDoxLjM1IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzcwODE1LDAsMCwwLjIwNDI2MSwtNTMuNTczOCwxMS4wMzQ1KSIKICAgICBpZD0iZzg1Ij4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ic3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgICBkPSJNIDI4Niw2OTIgViA1MCIKICAgICAgIGlkPSJwYXRoODMiIC8+CiAgPC9nPgogIDx0ZXh0CiAgICAgeD0iNTIuMiIKICAgICB5PSIxNjcuNyIKICAgICBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGw6IzIwNGE4NyIKICAgICBpZD0idGV4dDg3Ij4gLTLPgCA8L3RleHQ+CiAgPGcKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5OTk5O3N0cm9rZS13aWR0aDoxLjM1IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzcwODE1LDAsMCwwLjIwNDI2MSw4OS42NTcsMTEuMjk3OCkiCiAgICAgaWQ9Imc5MSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9InN0cm9rZTojOTk5OTk5O3N0cm9rZS13aWR0aDoxLjM1IgogICAgICAgZD0iTSA3NzEsNjkyIFYgNTAiCiAgICAgICBpZD0icGF0aDg5IiAvPgogIDwvZz4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMjA0MjYxLDkuMjMzNzcsMTEuMjk3OCkiCiAgICAgaWQ9Imc5NSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9InN0cm9rZTojOTk5OTk5O3N0cm9rZS13aWR0aDoxLjM1IgogICAgICAgZD0iTSA3NzEsNjkyIFYgNTAiCiAgICAgICBpZD0icGF0aDkzIiAvPgogIDwvZz4KICA8ZwogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMjA0MjYxLDQ5LjQ0NiwxMS4yOTc4KSIKICAgICBpZD0iZzk5Ij4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ic3Ryb2tlOiM5OTk5OTk7c3Ryb2tlLXdpZHRoOjEuMzUiCiAgICAgICBkPSJNIDc3MSw2OTIgViA1MCIKICAgICAgIGlkPSJwYXRoOTciIC8+CiAgPC9nPgogIDx1c2UKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4xNjg2NzYsMzEwLjY1Miw2MS41OTU0KSIKICAgICB4bGluazpocmVmPSIjaWQ2IgogICAgIHg9Ii0xNjAiCiAgICAgeT0iMCIKICAgICBpZD0idXNlMTAxIiAvPgogIDxnCiAgICAgc3R5bGU9Im9wYWNpdHk6MC40IgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzcwODE1LDAsMCwwLjM3MDgxNSwtNDM5LjM5OSwyNjIuNjMpIgogICAgIGlkPSJnMTIzIj4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDYiCiAgICAgICB4PSItODAiCiAgICAgICB5PSIwIgogICAgICAgaWQ9InVzZTEwMyIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDYiCiAgICAgICB4PSItNDAiCiAgICAgICB5PSIwIgogICAgICAgaWQ9InVzZTEwNSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDYiCiAgICAgICB4PSI0MCIKICAgICAgIHk9IjAiCiAgICAgICBpZD0idXNlMTA3IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkNiIKICAgICAgIHg9IjgwIgogICAgICAgeT0iMCIKICAgICAgIGlkPSJ1c2UxMDkiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQ3IgogICAgICAgeD0iMCIKICAgICAgIHk9IjEyNS43IgogICAgICAgaWQ9InVzZTExMSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDciCiAgICAgICB4PSIwIgogICAgICAgeT0iNjIuOCIKICAgICAgIGlkPSJ1c2UxMTMiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQ3IgogICAgICAgeD0iMCIKICAgICAgIHk9Ii02Mi44IgogICAgICAgaWQ9InVzZTExNSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDciCiAgICAgICB4PSIwIgogICAgICAgeT0iLTEyNS43IgogICAgICAgaWQ9InVzZTExNyIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDciCiAgICAgICB4PSIwIgogICAgICAgeT0iLTE4OC41IgogICAgICAgaWQ9InVzZTExOSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDciCiAgICAgICB4PSIwIgogICAgICAgeT0iLTI1MS4zIgogICAgICAgaWQ9InVzZTEyMSIgLz4KICA8L2c+CiAgPHVzZQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzcwODE1LDAsMCwwLjM3MDgxNSwtNDM5LjM5OSwyNjIuNjMpIgogICAgIHhsaW5rOmhyZWY9IiNpZDgiCiAgICAgeD0iMTExIgogICAgIHk9IjE2IgogICAgIGlkPSJ1c2UxMjUiIC8+CiAgPHVzZQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzcwODE1LDAsMCwwLjM3MDgxNSwtNDM5LjM5OSwyNjIuNjMpIgogICAgIHhsaW5rOmhyZWY9IiNpZDkiCiAgICAgeD0iLTYiCiAgICAgeT0iLTE0OSIKICAgICBpZD0idXNlMTI3IiAvPgogIDx1c2UKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTQzOS4zOTksMjYyLjYzKSIKICAgICB4bGluazpocmVmPSIjaWQxMCIKICAgICB4PSIxNSIKICAgICB5PSI5OSIKICAgICBpZD0idXNlMTI5IiAvPgogIDx1c2UKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTQzOS4zOTksMjYyLjYzKSIKICAgICB4bGluazpocmVmPSIjaWQxMSIKICAgICB4PSIxNSIKICAgICB5PSItMjE1IgogICAgIGlkPSJ1c2UxMzEiIC8+CiAgPGcKICAgICBzdHlsZT0ic3Ryb2tlOndoaXRlO3N0cm9rZS13aWR0aDozNTBweDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMzcwODE1LC00MzkuMzk5LDI3MS45MDEpIgogICAgIGlkPSJnMTQxIj4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDEyIgogICAgICAgeD0iLTgwIgogICAgICAgeT0iMCIKICAgICAgIGlkPSJ1c2UxMzMiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQxMyIKICAgICAgIHg9Ii00MCIKICAgICAgIHk9IjAiCiAgICAgICBpZD0idXNlMTM1IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMTQiCiAgICAgICB4PSI0MCIKICAgICAgIHk9IjAiCiAgICAgICBpZD0idXNlMTM3IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMTUiCiAgICAgICB4PSI4MCIKICAgICAgIHk9IjAiCiAgICAgICBpZD0idXNlMTM5IiAvPgogIDwvZz4KICA8ZwogICAgIHN0eWxlPSJzdHJva2U6d2hpdGU7c3Ryb2tlLXdpZHRoOjM1MHB4O3N0cm9rZS1saW5lam9pbjpyb3VuZCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTQ0Mi4zNjYsMjY1LjIyNikiCiAgICAgaWQ9ImcxNTUiPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMTYiCiAgICAgICB4PSIwIgogICAgICAgeT0iMTI1LjciCiAgICAgICBpZD0idXNlMTQzIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMTciCiAgICAgICB4PSIwIgogICAgICAgeT0iNjIuOCIKICAgICAgIGlkPSJ1c2UxNDUiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQxOCIKICAgICAgIHg9IjAiCiAgICAgICB5PSItNjIuOCIKICAgICAgIGlkPSJ1c2UxNDciIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQxOSIKICAgICAgIHg9IjAiCiAgICAgICB5PSItMTI1LjciCiAgICAgICBpZD0idXNlMTQ5IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMjAiCiAgICAgICB4PSIwIgogICAgICAgeT0iLTE4OC41IgogICAgICAgaWQ9InVzZTE1MSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDIxIgogICAgICAgeD0iMCIKICAgICAgIHk9Ii0yNTEuMyIKICAgICAgIGlkPSJ1c2UxNTMiIC8+CiAgPC9nPgogIDx1c2UKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTQzOS4zOTksMjYyLjYzKSIKICAgICB4bGluazpocmVmPSIjaWQ4IgogICAgIHg9IjExMSIKICAgICB5PSIxNiIKICAgICBpZD0idXNlMTU3IiAvPgogIDx1c2UKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTQzOS4zOTksMjYyLjYzKSIKICAgICB4bGluazpocmVmPSIjaWQ5IgogICAgIHg9Ii02IgogICAgIHk9Ii0yNzYiCiAgICAgaWQ9InVzZTE1OSIgLz4KICA8ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzcwODE1LDAsMCwwLjM3MDgxNSwtNDM5LjM5OSwyNzEuOTAxKSIKICAgICBpZD0iZzE2OSI+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQxMiIKICAgICAgIHg9Ii04MCIKICAgICAgIHk9IjAiCiAgICAgICBpZD0idXNlMTYxIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMTMiCiAgICAgICB4PSItNDAiCiAgICAgICB5PSIwIgogICAgICAgaWQ9InVzZTE2MyIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDE0IgogICAgICAgeD0iNDAiCiAgICAgICB5PSIwIgogICAgICAgaWQ9InVzZTE2NSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDE1IgogICAgICAgeD0iODAiCiAgICAgICB5PSIwIgogICAgICAgaWQ9InVzZTE2NyIgLz4KICA8L2c+CiAgPGcKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjM3MDgxNSwwLDAsMC4zNzA4MTUsLTQ0Mi4zNjYsMjY1LjIyNikiCiAgICAgaWQ9ImcxODMiPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMTYiCiAgICAgICB4PSIwIgogICAgICAgeT0iMTI1LjciCiAgICAgICBpZD0idXNlMTcxIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMTciCiAgICAgICB4PSIwIgogICAgICAgeT0iNjIuOCIKICAgICAgIGlkPSJ1c2UxNzMiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQxOCIKICAgICAgIHg9IjAiCiAgICAgICB5PSItNjIuOCIKICAgICAgIGlkPSJ1c2UxNzUiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQxOSIKICAgICAgIHg9IjAiCiAgICAgICB5PSItMTI1LjciCiAgICAgICBpZD0idXNlMTc3IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMjAiCiAgICAgICB4PSIwIgogICAgICAgeT0iLTE4OC41IgogICAgICAgaWQ9InVzZTE3OSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDIxIgogICAgICAgeD0iMCIKICAgICAgIHk9Ii0yNTEuMyIKICAgICAgIGlkPSJ1c2UxODEiIC8+CiAgPC9nPgogIDxnCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMzcwODE1LC00MzkuMzk5LDI2Mi42MykiCiAgICAgaWQ9ImcyMDUiPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMjIiCiAgICAgICB4PSItODAiCiAgICAgICB5PSIwIgogICAgICAgaWQ9InVzZTE4NSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDIyIgogICAgICAgeD0iLTQwIgogICAgICAgeT0iMCIKICAgICAgIGlkPSJ1c2UxODciIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQyMiIKICAgICAgIHg9IjQwIgogICAgICAgeT0iMCIKICAgICAgIGlkPSJ1c2UxODkiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQyMiIKICAgICAgIHg9IjgwIgogICAgICAgeT0iMCIKICAgICAgIGlkPSJ1c2UxOTEiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQyMyIKICAgICAgIHg9IjAiCiAgICAgICB5PSIxMjUuNyIKICAgICAgIGlkPSJ1c2UxOTMiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQyMyIKICAgICAgIHg9IjAiCiAgICAgICB5PSI2Mi44IgogICAgICAgaWQ9InVzZTE5NSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDIzIgogICAgICAgeD0iMCIKICAgICAgIHk9Ii02Mi44IgogICAgICAgaWQ9InVzZTE5NyIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDIzIgogICAgICAgeD0iMCIKICAgICAgIHk9Ii0xMjUuNyIKICAgICAgIGlkPSJ1c2UxOTkiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQyMyIKICAgICAgIHg9IjAiCiAgICAgICB5PSItMTg4LjUiCiAgICAgICBpZD0idXNlMjAxIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkMjMiCiAgICAgICB4PSIwIgogICAgICAgeT0iLTI1MS4zIgogICAgICAgaWQ9InVzZTIwMyIgLz4KICA8L2c+CiAgPGcKICAgICBzdHlsZT0ib3BhY2l0eTowLjQiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4zNzA4MTUsMCwwLDAuMzcwODE1LDE0Ni4xOTksNTAuMTcyMSkiCiAgICAgaWQ9ImcyMjciPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkNiIKICAgICAgIHg9Ii04MCIKICAgICAgIHk9IjAiCiAgICAgICBpZD0idXNlMjA3IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkNiIKICAgICAgIHg9Ii00MCIKICAgICAgIHk9IjAiCiAgICAgICBpZD0idXNlMjA5IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkNiIKICAgICAgIHg9IjQwIgogICAgICAgeT0iMCIKICAgICAgIGlkPSJ1c2UyMTEiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjaWQ2IgogICAgICAgeD0iODAiCiAgICAgICB5PSIwIgogICAgICAgaWQ9InVzZTIxMyIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDciCiAgICAgICB4PSIwIgogICAgICAgeT0iMTI1LjciCiAgICAgICBpZD0idXNlMjE1IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkNyIKICAgICAgIHg9IjAiCiAgICAgICB5PSI2Mi44IgogICAgICAgaWQ9InVzZTIxNyIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNpZDciCiAgICAgICB4PSIwIgogICAgICAgeT0iLTYyLjgiCiAgICAgICBpZD0idXNlMjE5IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkNyIKICAgICAgIHg9IjAiCiAgICAgICB5PSItMTI1LjciCiAgICAgICBpZD0idXNlMjIxIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkNyIKICAgICAgIHg9IjAiCiAgICAgICB5PSItMTg4LjUiCiAgICAgICBpZD0idXNlMjIzIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2lkNyIKICAgICAgIHg9IjAiCiAgICAgICB5PSItMjUxLjMiCiAgICAgICBpZD0idXNlMjI1IiAvPgogIDwvZz4KICA8cGF0aAogICAgIHN0eWxlPSJtYXJrZXItZW5kOnVybCgjaWQyNDc4MzkpO2ZpbGw6IzJlMzQzNjtmaWxsLW9wYWNpdHk6MC43NTtzdHJva2U6IzIwNGE4NztzdHJva2Utd2lkdGg6MS4xMSIKICAgICBkPSJNIDM4LjYsODEuMSBIIDQwMCIKICAgICBpZD0icGF0aDIyOSIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJtYXJrZXItZW5kOnVybCgjaWQyNDEyODMpO2ZpbGw6IzJlMzQzNjtmaWxsLW9wYWNpdHk6MC43NTtzdHJva2U6IzIwNGE4NztzdHJva2Utd2lkdGg6MS4xMSIKICAgICBkPSJNIDIxMy45LDE1My4xIFYgMi4yIgogICAgIGlkPSJwYXRoMjMxIiAvPgogIDx0ZXh0CiAgICAgeD0iMzk0LjMiCiAgICAgeT0iOTguNiIKICAgICBzdHlsZT0iZmlsbDojMjA0YTg3O2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUztmb250LXNpemU6MjAuOHB4O2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7c3Ryb2tlLXdpZHRoOjAuMzdweCIKICAgICBpZD0idGV4dDIzMyI+eDwvdGV4dD4KICA8dGV4dAogICAgIHg9IjE5Ni4yIgogICAgIHk9IjEzLjEiCiAgICAgc3R5bGU9ImZpbGw6IzIwNGE4Nztmb250LWZhbWlseTpUcmVidWNoZXQgTVM7Zm9udC1zaXplOjIwLjhweDtmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkO3N0cm9rZS13aWR0aDowLjM3cHgiCiAgICAgaWQ9InRleHQyMzUiPnk8L3RleHQ+CiAgPHRleHQKICAgICB4PSIyNzkuOTUzIgogICAgIHk9IjM4Ljk5NzciCiAgICAgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjIwcHg7Zm9udC1mYW1pbHk6J1RyZWJ1Y2hldCBNUyc7ZmlsbDojZWRkNDAwO3N0cm9rZS13aWR0aDowLjM3cHgiCiAgICAgaWQ9InRleHQyMzciPnNpbih4KTwvdGV4dD4KICA8dGV4dAogICAgIHg9IjM2LjEiCiAgICAgeT0iMTgzLjUiCiAgICAgc3R5bGU9ImZpbGw6IzhmNTkwMjtmb250LWZhbWlseTpUcmVidWNoZXQgTVM7Zm9udC1zaXplOjEzLjNweDtzdHJva2Utd2lkdGg6MXB4IgogICAgIGlkPSJ0ZXh0MjM5Ij4tMzYwwrA8L3RleHQ+CiAgPHRleHQKICAgICB4PSI3NS40IgogICAgIHk9IjE4My41IgogICAgIHN0eWxlPSJmaWxsOiM4ZjU5MDI7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TO2ZvbnQtc2l6ZToxMy4zcHg7c3Ryb2tlLXdpZHRoOjFweCIKICAgICBpZD0idGV4dDI0MSI+LTI3MMKwPC90ZXh0PgogIDx0ZXh0CiAgICAgeD0iMTE2LjgiCiAgICAgeT0iMTgzLjUiCiAgICAgc3R5bGU9ImZpbGw6IzhmNTkwMjtmb250LWZhbWlseTpUcmVidWNoZXQgTVM7Zm9udC1zaXplOjEzLjNweDtzdHJva2Utd2lkdGg6MXB4IgogICAgIGlkPSJ0ZXh0MjQzIj4tMTgwwrA8L3RleHQ+CiAgPHRleHQKICAgICB4PSIxNjAuNSIKICAgICB5PSIxODMuNSIKICAgICBzdHlsZT0iZmlsbDojOGY1OTAyO2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUztmb250LXNpemU6MTMuM3B4O3N0cm9rZS13aWR0aDoxcHgiCiAgICAgaWQ9InRleHQyNDUiPi05MMKwPC90ZXh0PgogIDx0ZXh0CiAgICAgeD0iMjQ0LjQiCiAgICAgeT0iMTgzLjUiCiAgICAgc3R5bGU9ImZpbGw6IzhmNTkwMjtmb250LWZhbWlseTpUcmVidWNoZXQgTVM7Zm9udC1zaXplOjEzLjNweDtzdHJva2Utd2lkdGg6MXB4IgogICAgIGlkPSJ0ZXh0MjQ3Ij45MMKwPC90ZXh0PgogIDx0ZXh0CiAgICAgeD0iMjgwLjMiCiAgICAgeT0iMTgzLjUiCiAgICAgc3R5bGU9ImZpbGw6IzhmNTkwMjtmb250LWZhbWlseTpUcmVidWNoZXQgTVM7Zm9udC1zaXplOjEzLjNweDtzdHJva2Utd2lkdGg6MXB4IgogICAgIGlkPSJ0ZXh0MjQ5Ij4xODDCsDwvdGV4dD4KICA8dGV4dAogICAgIHg9IjMyMS4xIgogICAgIHk9IjE4My41IgogICAgIHN0eWxlPSJmaWxsOiM4ZjU5MDI7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TO2ZvbnQtc2l6ZToxMy4zcHg7c3Ryb2tlLXdpZHRoOjFweCIKICAgICBpZD0idGV4dDI1MSI+MjcwwrA8L3RleHQ+CiAgPHRleHQKICAgICB4PSIzNjEuNCIKICAgICB5PSIxODMuNSIKICAgICBzdHlsZT0iZmlsbDojOGY1OTAyO2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUztmb250LXNpemU6MTMuM3B4O3N0cm9rZS13aWR0aDoxcHgiCiAgICAgaWQ9InRleHQyNTMiPjM2MMKwPC90ZXh0PgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VkZDQwMDtzdHJva2Utd2lkdGg6MiIKICAgICBkPSJtIDM4LjYsMTEwLjggYyAxLjEsLTIuMiAyLjIsLTQuNSAzLjMsLTYuNyAxLC0yLjkgMi4zLC00LjMgMywtNyAxLjQsLTEuOSAyLjIsLTQuOCAzLjMsLTcgMS4xLC0yLjcgMi41LC01LjMgMy4zLC04LjIgMS4zLC0xLjcgMS45LC00LjUgMywtNi4zIDAuOCwtMi4yIDEuOSwtNC4xIDIuNiwtNi4zIDEsLTEuNiAyLC00LjQgMywtNi4zIDEsLTIuMSAxLjksLTQuNCAzLC02LjMgMS4xLC0yLjcgMi4yLC00LjggMy4zLC03IDEuNSwtMi42IDIuNCwtNC41IDMuNywtNyAxLjIsLTEuNyAyLjMsLTMuNiAzLjMsLTUuNiAxLjMsLTEuNiAyLjcsLTMuOSA0LjEsLTUuNiAxLjcsLTEuOCAzLC00IDUuMiwtNS42IDEuOCwtMS4zIDMuMywtMy4xIDUuOSwtMy4zIDEuOCwtMS4zIDYuMywtMC45IDguNSwwIDIuMiwwLjkgNCwyLjIgNS42LDMuNyAxLjgsMS4zIDMuMywzLjQgNC44LDUuMiAxLjUsMS45IDMsMy45IDQuMSw1LjkgMS40LDEuNyAyLjUsNC4yIDMuNyw1LjkgMSwyLjIgMi43LDQuOSAzLjcsNyAxLjEsMi41IDIuNiw0LjIgMy4zLDcuNCAxLjEsMS42IDIuMSwzLjQgMi42LDUuNiAxLjMsMS42IDEuNyw0IDMsNS45IDAuOCwyLjQgMi4zLDQuNyAzLDcuNCAxLjIsMS42IDEuNiwzLjggMi42LDUuNiAxLjEsMi43IDIuNiw1LjggMy43LDguNSAxLjMsMi44IDIuNCw1LjggMy43LDguMiAwLjgsMi42IDIuMiw0LjIgMyw3IDEuMiwxLjYgMS45LDMuOCAzLDUuNiAxLjEsMi4zIDIuMyw0LjcgMy43LDcgMS4xLDIuMyAyLjYsNC4yIDMuNyw2LjMgMS4xLDEuOCAyLjcsMy42IDMuNyw1LjYgMS40LDEuNCAyLjcsMi45IDQuMSw0LjUgMiwxLjYgMy4xLDMuMiA1LjYsNC4xIDEuOCwxLjcgNS40LDEuNiA4LjksMS41IDEuNSwtMC45IDMuNCwtMS41IDQuOCwtMi42IDIuNSwtMS40IDMuOCwtMy43IDUuOSwtNS4yIDEuMSwtMi4zIDMuMSwtMy44IDQuMSwtNS45IDEuNCwtMS43IDIuNywtNCAzLjcsLTUuOSAxLjIsLTEuNyAyLjQsLTQgMy4zLC01LjkgMS40LC0yLjUgMy4yLC02LjQgNC41LC04LjkgMS4yLC0yLjEgMi4yLC00LjggMy4zLC03IDEuMSwtMi41IDIuMiwtNS4xIDMuMywtNy40IDEsLTIuOSAyLjIsLTQuMyAzLC03LjQgMS4zLC0xLjcgMS45LC00LjUgMywtNi4zIDEsLTIuOSAyLjIsLTQuMyAzLC03LjQgMS4zLC0xLjYgMS43LC00IDMsLTUuOSAwLjgsLTIuMiAyLC00LjYgMywtNi43IDEuMiwtMi42IDMsLTUuOCA0LjUsLTkuMyAxLjIsLTEuNyAyLjEsLTQgMy4zLC01LjkgMC45LC0yLjEgMi41LC0zLjUgMy4zLC01LjkgMS41LC0xLjUgMi43LC0zLjYgNC4xLC01LjYgMS45LC0xLjkgMy4yLC0zLjggNS4yLC01LjIgMS44LC0xLjggMy44LC0yLjYgNS45LC0zLjcgMi44LC0wLjggNy4zLC0wLjUgOS4zLDAuNyAyLjIsMSAzLjgsMi42IDUuNiw0LjEgMS44LDIuMSAzLjQsMy41IDQuOCw1LjYgMS41LDIuMiAzLDQgNC4xLDYuMyAxLjIsMS42IDIuNiwzLjcgMy4zLDUuOSAxLjcsMS44IDIuMiw0IDMuMyw1LjkgMS4xLDIuMiAyLjIsNC40IDMuMyw2LjcgMSwyLjkgMi4zLDQuMyAzLDcgMS40LDEuOCAyLjEsNC43IDMuMyw3IDEuMSwyLjcgMi42LDUuOCAzLjcsOC41IDAuOSwyLjEgMS45LDQgMi42LDYuMyAxLjIsMS45IDEuOSw0LjUgMyw2LjMgMC45LDIuNiAyLjIsNC42IDMsNyAxLDIuMSAyLDMuNyAzLDYuMyAxLjEsMi4yIDIuMiw0LjQgMy4zLDYuNyAxLjEsMi4zIDIuNyw0LjkgMy43LDcgMS4zLDEuNyAyLjUsNC4yIDMuNyw1LjkgMS4yLDEuOCAyLjYsMy45IDQuMSw1LjYgMS40LDEuOSAzLDMuOSA0LjgsNS4yIDEuOSwxLjUgMy41LDMgNi43LDMuNyAyLjEsMC44IDYsMC40IDcuOCwtMC40IDIuNCwtMC44IDQuMSwtMi43IDYuMywtNC4xIDEuNCwtMS43IDMuMSwtMy42IDQuNSwtNS4yIDEuMSwtMS44IDIuOCwtMy42IDMuNywtNS42IDEuMiwtMS43IDIuMywtMy42IDMuMywtNS42IDEuNSwtMi4yIDIuMSwtNC4zIDMuNywtNi43IDEuMSwtMi40IDIuNSwtNC40IDMuMywtNy40IDEuMiwtMS42IDIuMiwtNC4xIDMsLTYuMyAxLjEsLTEuNSAyLC0zLjkgMi42LC01LjYgMC45LC0yIDIuMSwtMy44IDIuNiwtNi4zIDEuMywtMS43IDIuMiwtNC40IDMsLTYuNyAxLjMsLTEuNyAxLjksLTQuNSAzLC02LjMgMS4xLC0zLjEgMi43LC01LjcgMy43LC04LjkgMS4xLC0xLjQgMS42LC0zLjggMi42LC01LjIgMS4zLC0zLjMgMi41LC01LjIgMy43LC03LjggLTAuNCwtMC44IDAuOCwwIDAuNCwtMC43IgogICAgIGlkPSJwYXRoNzciIC8+CiAgPHRleHQKICAgICB4PSIxNTEuOSIKICAgICB5PSIzNi41IgogICAgIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6MjBweDtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6J1RyZWJ1Y2hldCBNUyc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LXBvc2l0aW9uOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtdmFyaWFudC1hbHRlcm5hdGVzOm5vcm1hbDtmb250LXZhcmlhbnQtZWFzdC1hc2lhbjpub3JtYWw7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczpub3JtYWw7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwMDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7d3JpdGluZy1tb2RlOmxyLXRiO2RpcmVjdGlvbjpsdHI7dGV4dC1vcmllbnRhdGlvbjptaXhlZDtkb21pbmFudC1iYXNlbGluZTphdXRvO2Jhc2VsaW5lLXNoaWZ0OmJhc2VsaW5lO3RleHQtYW5jaG9yOnN0YXJ0O3doaXRlLXNwYWNlOm5vcm1hbDtzaGFwZS1wYWRkaW5nOjA7c2hhcGUtbWFyZ2luOjA7aW5saW5lLXNpemU6MDt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDojNzI5ZmNmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDowLjM3cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxOy1pbmtzY2FwZS1zdHJva2U6bm9uZTtzdG9wLWNvbG9yOiMwMDAwMDAiCiAgICAgaWQ9InRleHQyMzctMCIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTkuNzU0NiwzLjY4NDExKSI+Y29zKHgpPC90ZXh0PgogIDxwYXRoCiAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNC43cHg7Zm9udC1mYW1pbHk6J0NvbWljIFNhbnMgTVMnO2ZpbGw6bm9uZTtzdHJva2U6IzcyOWZjZjtzdHJva2Utd2lkdGg6MiIKICAgICBkPSJtIDM4LjExMjUsMzAuMTY3MyBjIDEuNSwtMS45IDMuMiwtMy40IDUuMiwtNC44IDEuNiwtMS4xIDMsLTIuNCA1LjYsLTIuNiAxLjgsLTAuOCA1LjcsLTAuNSA3LDAuNCAyLjUsMC42IDQuMiwyLjQgNS45LDMuNyAxLjgsMS4yIDMuMiwzLjUgNC44LDUuMiAxLjQsMi4yIDMuMSwzLjkgNC41LDYuNyAxLjYsMS45IDIuMywzLjggMy43LDUuOSAxLjIsMi41IDIuNCw0LjggNC4xLDcuOCAxLjEsMi42IDIuMyw0LjkgMy4zLDcgMC44LDIuMSAxLjksMy44IDIuNiw1LjkgMS4xLDIuMyAyLjQsNC43IDMuMyw3LjggMS4zLDEuNyAxLjksNC41IDMsNi4zIDEsMi4zIDEuNjk5OSw0LjMgMi45OTk5LDYuNyAwLjcsMi40IDIsMy45IDIuNiw2LjcgMS4yLDEuNCAxLjUsMy42IDIuNiw1LjIgMC43OTk2LDIuNTk5NyAyLjE5OTYsNC4xOTk3IDIuOTk5Niw2Ljk5OTcgMS4yLDEuNiAxLjksMy44IDMsNS42IDEuMSwyLjYgMi42LDQuNSAzLjMsNyAxLjMsMS4zIDEuOSwzLjMgMyw0LjggMS40LDIuNCAyLjcsNC4yIDQuMSw2LjMgMS41LDEuOSAyLjYsMy45IDQuNSw1LjIgMC41LDIgMi45LDIuOCA0LjEsNC4xIDEuOSwxLjMgMy44LDIuNiA2LjcsMyAzLjksMC40IDcuMSwtMC42IDguOSwtMi4yIDIuMSwtMS4xIDMuOCwtMi42IDUuMiwtNC41IDEuNywtMS40IDIuOCwtMy4zIDQuMSwtNC44IDEuNCwtMS44IDIuNSwtMy44IDMuNywtNS42IDEuNSwtMi43IDIuNywtNC4zIDQuMSwtNy40IDEuMiwtMS42IDEuOSwtMy44IDMsLTUuNiAxLjEsLTIuNCAyLjMsLTQuMiAzLjMsLTcgMSwtMiAyLjIsLTQuMjk5NiAzLC02LjY5OTcgMS4xLC0xLjYgMS44LC0zLjggMi42LC01LjYgMC45LC0yIDIsLTQgMi42LC02LjMgMS4zLC0xLjcgMS45LC00LjUgMywtNi4zIDEsLTIuNiAyLjEsLTUuMiAzLjMsLTcuNCAwLjcsLTIuOCAyLjMsLTQuNyAzLC03LjQgMS4yLC0xLjYgMiwtNC40IDMsLTUuOSAxLjEsLTIuNSAyLjMsLTUgMy4zLC03IDAuOSwtMi4xIDIuMywtNC4yIDMuMywtNi4zIDEuMSwtMi4xIDIuNiwtNC41IDMuNywtNi4zIDEuMywtMi4xIDIuOCwtNC4zIDQuMSwtNS45IDEuNiwtMi4xIDMuMywtNC4xIDUuMiwtNS42IDEuMywtMS43IDIuOSwtMi42IDUuMiwtMy43IDEuOSwtMS41IDcuMywtMS42IDkuNiwtMC40IDIuNSwxIDQuMiwyLjMgNS45LDMuNyAxLjQsMiAzLjUsMy4yIDQuOCw1LjYgMS41LDEuNyAzLDQgNC41LDYuMyAxLjEsMS45IDIuNiw0LjIgMy43LDYuMyAxLDIuMyAyLjcsNC4yIDMuMyw2LjcgMS4yLDEuNyAyLjUsNC41IDMuMyw3IDEuMywxLjYgMi4yLDQuOCAzLjMsNi43IDEsMi43IDIuNCw1IDMuMyw3LjggMS4yLDIgMiw1LjIgMy4zLDcgMC43LDIuOCAxLjksNSAzLDcgMC42LDIuNSAyLjEsNC4xIDIuNiw2LjcgMS4xLDEuNCAxLjYsMy44IDIuNiw1LjIgMC45LDIuNzk5NyAyLjMsNC4xOTk3IDMsNi45OTk3IDEuMiwxLjYgMS45LDMuOCAzLDUuNiAxLjIsMi4zIDIuMiw0LjUgMy43LDcgMC45LDIgMi4zLDMuOCAzLjMsNS45IDEuMywxLjUgMi4yLDMuNyAzLjcsNS4yIDEuMiwxLjkgMy4xLDMuOCA0LjUsNS42IDEuNiwxLjMgMywyLjYgNC44LDMuNyAyLjEsMS42IDUuNywyLjIgOS42LDEuOSAxLjYsLTAuOSAzLjcsLTEuMiA0LjgsLTIuNiAxLjcsLTEgMy42LC0yLjUgNC44LC00LjEgMS40LC0xLjcgMi45LC0zIDQuMSwtNS4yIDEuMywtMS41IDIuMiwtMy4yIDMuMywtNC44IDEuMiwtMi4xIDIuNCwtMy44IDMuMywtNS45IDEuMiwtMS42IDEuOCwtMy41IDMsLTUuNiAxLjIsLTIuMyAyLjMsLTQuNiAzLjMsLTYuNyAxLjEsLTIgMi4zLC01LjEgMy4zLC02Ljk5OTcgMSwtMi42IDEuOSwtNC41IDMsLTYuNyAxLC0yLjkgMi4yLC00LjMgMywtNy40IDEuMiwtMS41IDEuNywtMy43IDIuNiwtNS42IDEuMSwtMi41IDIuMywtNSAzLjMsLTcuOCAxLjEsLTIuNCAyLjEsLTQuNSAzLC02LjcgMS4xLC0yIDEuOSwtNC4zIDMsLTYuMyAxLC0yLjIgMi40LC00LjYgMy4zLC03LjQgMS43LC0xLjkgMi4yLC00IDMuMywtNS45IDEuNCwtMi4zIDIuMywtNC4xIDMuNywtNi4zIDEuNywtMi44IDMuMiwtNSA1LjIsLTcuNCAxLjMsLTEuNSAyLjksLTMuOCA0LjUsLTQuOCAxLjcsLTEuMyAzLjUsLTMuMSA1LjksLTMuNyAyLjIsLTEuMyA3LC0wLjggOS4zLDAgMS42LDEuMSAzLjQsMiA0LjgsMy4zIDEuNCwxLjEgMi43LDIuMyAzLjcsMy43IgogICAgIGlkPSJwYXRoNzkiIC8+Cjwvc3ZnPgo=", + "w": 405, + "h": 184, + "mimeType": "image/svg+xml", + "isAnimated": false + }, + "meta": {}, + "id": "asset:1338420211", + "typeName": "asset" + }, + { + "type": "image", + "props": { + "name": "sin-cos-tan.svg", + "src": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjQ2Ny42IgogICBoZWlnaHQ9IjE4MC45IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc3NiIKICAgc29kaXBvZGk6ZG9jbmFtZT0ic2luLWNvcy10YW4uc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjAuMSAoM2JjMmU4MTNmNSwgMjAyMC0wOS0wNykiPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTgwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjY0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI0ODAiCiAgICAgaWQ9Im5hbWVkdmlldzc4IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc3NiIKICAgICBpbmtzY2FwZTpkb2N1bWVudC1yb3RhdGlvbj0iMCIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzMTQiPgogICAgPG1hcmtlcgogICAgICAgaWQ9ImlkMyIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgb3JpZW50PSJhdXRvIj4KICAgICAgPHBhdGgKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44LDAsMCwwLjgsMTAsMCkiCiAgICAgICAgIHN0eWxlPSJzdHJva2U6YmxhY2s7c3Ryb2tlLXdpZHRoOjFwdCIKICAgICAgICAgZD0iTSAwLDAgNSwtNSAtMTIuNSwwIDUsNSAwLDAgWiIKICAgICAgICAgaWQ9InBhdGgyIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpZD0iaWQ0IgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBvcmllbnQ9ImF1dG8iPgogICAgICA8cGF0aAogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC44LDAsMCwtMC44LC0xMCwwKSIKICAgICAgICAgc3R5bGU9InN0cm9rZTpibGFjaztzdHJva2Utd2lkdGg6MXB0IgogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IDAsMCBaIgogICAgICAgICBpZD0icGF0aDUiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlkPSJpZDIiCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIG9yaWVudD0iYXV0byI+CiAgICAgIDxwYXRoCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjQsMCwwLC0wLjQsLTQsMCkiCiAgICAgICAgIHN0eWxlPSJzdHJva2U6YmxhY2s7c3Ryb2tlLXdpZHRoOjFwdCIKICAgICAgICAgZD0iTSAwLDAgNSwtNSAtMTIuNSwwIDUsNSAwLDAgWiIKICAgICAgICAgaWQ9InBhdGg4IiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpZD0iaWQxIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBvcmllbnQ9ImF1dG8iPgogICAgICA8cGF0aAogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjQsMCwwLDAuNCw0LDApIgogICAgICAgICBzdHlsZT0ic3Ryb2tlOmJsYWNrO3N0cm9rZS13aWR0aDoxcHQiCiAgICAgICAgIGQ9Ik0gMCwwIDUsLTUgLTEyLjUsMCA1LDUgMCwwIFoiCiAgICAgICAgIGlkPSJwYXRoMTEiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgaWQ9ImlkMzE3MzciCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJpZDMxNzM3Ij4KICAgICAgPHBhdGgKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44LDAsMCwwLjgsMTAsMCkiCiAgICAgICAgIHN0eWxlPSJzdHJva2U6IzM0NjVhNDtzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjE7ZmlsbDojMzQ2NWE0IgogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IDAsMCBaIgogICAgICAgICBpZD0icGF0aDk2OCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICBpZD0iaWQ0NjQ5MiIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9ImlkNDY0OTIiPgogICAgICA8cGF0aAogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC44LDAsMCwtMC44LC0xMCwwKSIKICAgICAgICAgc3R5bGU9InN0cm9rZTojMzQ2NWE0O3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MTtmaWxsLW9wYWNpdHk6MTtmaWxsOiMzNDY1YTQiCiAgICAgICAgIGQ9Ik0gMCwwIDUsLTUgLTEyLjUsMCA1LDUgMCwwIFoiCiAgICAgICAgIGlkPSJwYXRoOTcxIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIGlkPSJpZDMyMjY2IgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iaWQzMjI2NiI+CiAgICAgIDxwYXRoCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOCwwLDAsMC44LDEwLDApIgogICAgICAgICBzdHlsZT0ic3Ryb2tlOiNjZTVjMDA7c3Ryb2tlLXdpZHRoOjFwdDtzdHJva2Utb3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxO2ZpbGw6I2NlNWMwMCIKICAgICAgICAgZD0iTSAwLDAgNSwtNSAtMTIuNSwwIDUsNSAwLDAgWiIKICAgICAgICAgaWQ9InBhdGg5NzQiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgaWQ9ImlkNDU4NTEiCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJpZDQ1ODUxIj4KICAgICAgPHBhdGgKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOCwwLDAsLTAuOCwtMTAsMCkiCiAgICAgICAgIHN0eWxlPSJzdHJva2U6I2NlNWMwMDtzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjE7ZmlsbDojY2U1YzAwIgogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IDAsMCBaIgogICAgICAgICBpZD0icGF0aDk3NyIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICBpZD0iaWQzNTI4NiIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9ImlkMzUyODYiPgogICAgICA8cGF0aAogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjgsMCwwLDAuOCwxMCwwKSIKICAgICAgICAgc3R5bGU9InN0cm9rZTojYzRhMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MTtmaWxsLW9wYWNpdHk6MTtmaWxsOiNjNGEwMDAiCiAgICAgICAgIGQ9Ik0gMCwwIDUsLTUgLTEyLjUsMCA1LDUgMCwwIFoiCiAgICAgICAgIGlkPSJwYXRoOTgwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgIGlkPSJpZDQ2MTQ3IgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iaWQ0NjE0NyI+CiAgICAgIDxwYXRoCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjgsMCwwLC0wLjgsLTEwLDApIgogICAgICAgICBzdHlsZT0ic3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjFwdDtzdHJva2Utb3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxO2ZpbGw6I2M0YTAwMCIKICAgICAgICAgZD0iTSAwLDAgNSwtNSAtMTIuNSwwIDUsNSAwLDAgWiIKICAgICAgICAgaWQ9InBhdGg5ODMiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgaWQ9ImlkMTQyNjciCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJpZDE0MjY3Ij4KICAgICAgPHBhdGgKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC40LDAsMCwwLjQsNCwwKSIKICAgICAgICAgc3R5bGU9InN0cm9rZTojMzQ2NWE0O3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MTtmaWxsLW9wYWNpdHk6MTtmaWxsOiMzNDY1YTQiCiAgICAgICAgIGQ9Ik0gMCwwIDUsLTUgLTEyLjUsMCA1LDUgMCwwIFoiCiAgICAgICAgIGlkPSJwYXRoMTE1NCIgLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlcgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICBpZD0iaWQyNDE0NiIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9ImlkMjQxNDYiPgogICAgICA8cGF0aAogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC40LDAsMCwtMC40LC00LDApIgogICAgICAgICBzdHlsZT0ic3Ryb2tlOiMzNDY1YTQ7c3Ryb2tlLXdpZHRoOjFwdDtzdHJva2Utb3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxO2ZpbGw6IzM0NjVhNCIKICAgICAgICAgZD0iTSAwLDAgNSwtNSAtMTIuNSwwIDUsNSAwLDAgWiIKICAgICAgICAgaWQ9InBhdGgxMTU3IiAvPgogICAgPC9tYXJrZXI+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgeD0iMC4wMjYwMTIyIgogICAgIHk9IjQuNzQ1MDEiCiAgICAgcnk9IjMyLjQiCiAgICAgd2lkdGg9IjE4OS4zIgogICAgIGhlaWdodD0iMTcxLjMiCiAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7b3ZlcmZsb3c6dmlzaWJsZTtvcGFjaXR5OjE7ZmlsbDojYzJlNmZmO3N0cm9rZS13aWR0aDoyO2ZpbGwtb3BhY2l0eToxIgogICAgIGlkPSJyZWN0MTYiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtvdmVyZmxvdzp2aXNpYmxlO2ZpbGw6bm9uZTtzdHJva2U6IzAwMDBmZjtzdHJva2Utd2lkdGg6MS42IgogICAgIGQ9Im0gNDIwLjYyNiwxMzcuNzQ1IGggLTIwMS40IGwgMjAxLjIsLTExMS42IHoiCiAgICAgaWQ9InBhdGgxOCIgLz4KICA8dGV4dAogICAgIHg9IjMwNS4yOTciCiAgICAgeT0iMTIyLjU2NSIKICAgICB0cmFuc2Zvcm09InNjYWxlKDEuMDAwMzEsMC45OTk2OTMpIgogICAgIHN0eWxlPSJmaWxsOiMzNDY1YTQ7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TO2ZvbnQtc2l6ZToyNS4xMDAxcHg7c3Ryb2tlLXdpZHRoOjIuNTMwMDEiCiAgICAgaWQ9InRleHQyMCI+zrg8L3RleHQ+CiAgPHBhdGgKICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtvdmVyZmxvdzp2aXNpYmxlO2ZpbGw6bm9uZTtzdHJva2U6IzM0NjVhNDtzdHJva2Utd2lkdGg6MS42O21hcmtlci1zdGFydDp1cmwoI2lkMTQyNjcpO21hcmtlci1lbmQ6dXJsKCNpZDI0MTQ2KSIKICAgICBkPSJtIDI4Ny45MjYsMTAyLjg0NSBhIDc1LjEsNzUuMSAwIDAgMSA4LjUsMzIuNyIKICAgICBpZD0icGF0aDIyIiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzM0NjVhNDtzdHJva2Utd2lkdGg6MC40cHgiCiAgICAgZD0ibSAyMTguMTI2LDE3MS41NDUgdiAtMjUuNCIKICAgICBpZD0icGF0aDI0IiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzM0NjVhNDtzdHJva2Utd2lkdGg6MC40cHgiCiAgICAgZD0ibSA0MjEuMDI2LDE3MS40NDUgdiAtMjUuNCIKICAgICBpZD0icGF0aDI2IiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzM0NjVhNDtzdHJva2Utd2lkdGg6MTttYXJrZXItc3RhcnQ6dXJsKCNpZDMxNzM3KTttYXJrZXItZW5kOnVybCgjaWQ0NjQ5Mik7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgZD0ibSA0MTguMjI2LDE1Ny40NDUgaCAtMTk3LjkiCiAgICAgaWQ9InBhdGgyOCIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNjZTVjMDA7c3Ryb2tlLXdpZHRoOjAuNHB4IgogICAgIGQ9Im0gMjE0LjAyNiwxMzQuNTQ1IC0xMS4zLC0yMC44IgogICAgIGlkPSJwYXRoMzAiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojY2U1YzAwO3N0cm9rZS13aWR0aDowLjRweCIKICAgICBkPSJtIDQxOC4xMjYsMjAuODQ1IC0xMS4zLC0yMC43IgogICAgIGlkPSJwYXRoMzIiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojY2U1YzAwO3N0cm9rZS13aWR0aDoxO21hcmtlci1zdGFydDp1cmwoI2lkMzIyNjYpO21hcmtlci1lbmQ6dXJsKCNpZDQ1ODUxKTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICBkPSJtIDQwOS4xMjYsMTEuMDQ1IC0xOTkuMywxMTAuOCIKICAgICBpZD0icGF0aDM0IiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2M0YTAwMDtzdHJva2Utd2lkdGg6MC40cHgiCiAgICAgZD0ibSA0NjcuNjI2LDEzOS4yNDUgaCAtNDIuNCIKICAgICBpZD0icGF0aDM2IiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2M0YTAwMDtzdHJva2Utd2lkdGg6MC40cHgiCiAgICAgZD0ibSA0NjcuNDI2LDI3LjA0NSBoIC00Mi40IgogICAgIGlkPSJwYXRoMzgiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojYzRhMDAwO3N0cm9rZS13aWR0aDoxO21hcmtlci1zdGFydDp1cmwoI2lkMzUyODYpO21hcmtlci1lbmQ6dXJsKCNpZDQ2MTQ3KTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICBkPSJtIDQ1My41MjYsMjguNTQ1IHYgMTA5LjUiCiAgICAgaWQ9InBhdGg0MCIgLz4KICA8dGV4dAogICAgIHg9IjE5Ni42NSIKICAgICB5PSIyMDIuMDQ3IgogICAgIHRyYW5zZm9ybT0icm90YXRlKC0yOC44Njk1KSIKICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmb250LXNpemU6MTguNjY2NjY3cHg7Zm9udC1mYW1pbHk6J1RyZWJ1Y2hldCBNUyc7b3ZlcmZsb3c6dmlzaWJsZTtmaWxsOiNjZTVjMDA7c3Ryb2tlLXdpZHRoOjFweDsiCiAgICAgaWQ9InRleHQ0MiI+SHlwb3RlbnVzZTwvdGV4dD4KICA8dGV4dAogICAgIHg9Ii0xMTguODM4IgogICAgIHk9IjQ0Ni4wMjYiCiAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTkwKSIKICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmb250LXNpemU6MTguNjY2N3B4O2ZvbnQtZmFtaWx5OidUcmVidWNoZXQgTVMnO292ZXJmbG93OnZpc2libGU7ZmlsbDojYzRhMDAwO3N0cm9rZS13aWR0aDoxcHgiCiAgICAgaWQ9InRleHQ0NCI+T3Bwb3NpdGU8L3RleHQ+CiAgPHRleHQKICAgICB4PSIyODMuMzUxIgogICAgIHk9IjE3NS41NDkiCiAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Zm9udC1zaXplOjE4LjY2NjdweDtmb250LWZhbWlseTonVHJlYnVjaGV0IE1TJztvdmVyZmxvdzp2aXNpYmxlO2ZpbGw6IzM0NjVhNDtzdHJva2Utd2lkdGg6MXB4IgogICAgIGlkPSJ0ZXh0NDYiPkFkamFjZW50PC90ZXh0PgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzM0NjVhNDtzdHJva2Utd2lkdGg6MS42IgogICAgIGQ9Im0gMzk4LjAyNiwxMzcuMzQ1IHYgLTIxLjkgaCAyMS41IgogICAgIGlkPSJwYXRoNDgiIC8+CiAgPHRleHQKICAgICB4PSIxNS4yMjYiCiAgICAgeT0iMzcuODQ1IgogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6IzY2MDBjYztmb250LWZhbWlseTpUcmVidWNoZXQgTVM7Zm9udC1zaXplOjE2cHg7b3ZlcmZsb3c6dmlzaWJsZTtzdHJva2Utd2lkdGg6MXB4IgogICAgIGlkPSJ0ZXh0NTAiPnNpbiDOuCA9PC90ZXh0PgogIDx0ZXh0CiAgICAgeD0iNzcuNjI2IgogICAgIHk9IjQ5LjU0NSIKICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNkMDYzMGI7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TO2ZvbnQtc2l6ZToxNnB4O292ZXJmbG93OnZpc2libGU7c3Ryb2tlLXdpZHRoOjFweCIKICAgICBpZD0idGV4dDUyIj5IeXBvdGVudXNlPC90ZXh0PgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC44IgogICAgIGQ9Im0gNzUuNzI2LDM1LjE0NSBoIDkxLjkiCiAgICAgaWQ9InBhdGg1NCIgLz4KICA8dGV4dAogICAgIHg9Ijg3LjkyNiIKICAgICB5PSIyOC43NDUiCiAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojYzRhMDAwO2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUztmb250LXNpemU6MTZweDtvdmVyZmxvdzp2aXNpYmxlO3N0cm9rZS13aWR0aDoxcHgiCiAgICAgaWQ9InRleHQ1NiI+T3Bwb3NpdGU8L3RleHQ+CiAgPHRleHQKICAgICB4PSIxMS41MjYiCiAgICAgeT0iODkuMzQ1IgogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6IzY2MDBjYztmb250LWZhbWlseTpUcmVidWNoZXQgTVM7Zm9udC1zaXplOjE2cHg7b3ZlcmZsb3c6dmlzaWJsZTtzdHJva2Utd2lkdGg6MXB4IgogICAgIGlkPSJ0ZXh0NTgiPmNvcyDOuCA9PC90ZXh0PgogIDx0ZXh0CiAgICAgeD0iMTEuODI2IgogICAgIHk9IjE0MS4zNDUiCiAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojNjYwMGNjO2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUztmb250LXNpemU6MTZweDtvdmVyZmxvdzp2aXNpYmxlO3N0cm9rZS13aWR0aDoxcHgiCiAgICAgaWQ9InRleHQ2MCI+dGFuIM64ID08L3RleHQ+CiAgPHRleHQKICAgICB4PSI3Ny42MjYiCiAgICAgeT0iOTkuODQ1IgogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6I2QwNjMwYjtmb250LWZhbWlseTpUcmVidWNoZXQgTVM7Zm9udC1zaXplOjE2cHg7b3ZlcmZsb3c6dmlzaWJsZTtzdHJva2Utd2lkdGg6MXB4IgogICAgIGlkPSJ0ZXh0NjIiPkh5cG90ZW51c2U8L3RleHQ+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjgiCiAgICAgZD0ibSA3NS43MjYsODUuNTQ1IGggOTEuOSIKICAgICBpZD0icGF0aDY0IiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC44IgogICAgIGQ9Im0gNzUuNzI2LDEzOC4wNDUgaCA5MS45IgogICAgIGlkPSJwYXRoNjYiIC8+CiAgPHRleHQKICAgICB4PSI4Ny45MjYiCiAgICAgeT0iMTMxLjU0NSIKICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNjNGEwMDA7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TO2ZvbnQtc2l6ZToxNnB4O292ZXJmbG93OnZpc2libGU7c3Ryb2tlLXdpZHRoOjFweCIKICAgICBpZD0idGV4dDY4Ij5PcHBvc2l0ZTwvdGV4dD4KICA8dGV4dAogICAgIHg9Ijg3LjAyNiIKICAgICB5PSI3OS40NDUiCiAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojMzQ2NWE0O2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUztmb250LXNpemU6MTZweDtvdmVyZmxvdzp2aXNpYmxlO3N0cm9rZS13aWR0aDoxcHgiCiAgICAgaWQ9InRleHQ3MCI+QWRqYWNlbnQ8L3RleHQ+CiAgPHRleHQKICAgICB4PSI4Ny4wMjYiCiAgICAgeT0iMTU0LjQ0NSIKICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiMzNDY1YTQ7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TO2ZvbnQtc2l6ZToxNnB4O292ZXJmbG93OnZpc2libGU7c3Ryb2tlLXdpZHRoOjFweCIKICAgICBpZD0idGV4dDcyIj5BZGphY2VudDwvdGV4dD4KPC9zdmc+Cg==", + "w": 468, + "h": 181, + "mimeType": "image/svg+xml", + "isAnimated": false + }, + "meta": {}, + "id": "asset:-1438593003", + "typeName": "asset" + }, + { + "type": "image", + "props": { + "name": "istockphoto-1411518273-612x612.jpg", + "src": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4QDeRXhpZgAASUkqAAgAAAABAA4BAgC8AAAAGgAAAAAAAABCbGFuayBjYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0gaW4gdHdvIGRpbWVuc2lvbnMuIFJlY3Rhbmd1bGFyIG9ydGhvZ29uYWwgY29vcmRpbmF0ZSBwbGFuZSB3aXRoIGF4ZXMgWCBhbmQgWS4gTWF0aCBzY2FsZSBzeXN0ZW0gdGVtcGxhdGUuIFZlY3RvciBpbGx1c3RyYXRpb24gaXNvbGF0ZWQgb24gd2hpdGUgYmFja2dyb3VuZP/hBdZodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgoJPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KCQk8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOklwdGM0eG1wQ29yZT0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcENvcmUvMS4wL3htbG5zLyIgICB4bWxuczpHZXR0eUltYWdlc0dJRlQ9Imh0dHA6Ly94bXAuZ2V0dHlpbWFnZXMuY29tL2dpZnQvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwbHVzPSJodHRwOi8vbnMudXNlcGx1cy5vcmcvbGRmL3htcC8xLjAvIiAgeG1sbnM6aXB0Y0V4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgcGhvdG9zaG9wOkNyZWRpdD0iR2V0dHkgSW1hZ2VzIiBHZXR0eUltYWdlc0dJRlQ6QXNzZXRJRD0iMTQxMTUxODI3MyIgeG1wUmlnaHRzOldlYlN0YXRlbWVudD0iaHR0cHM6Ly93d3cuaXN0b2NrcGhvdG8uY29tL2xlZ2FsL2xpY2Vuc2UtYWdyZWVtZW50P3V0bV9tZWRpdW09b3JnYW5pYyZhbXA7dXRtX3NvdXJjZT1nb29nbGUmYW1wO3V0bV9jYW1wYWlnbj1pcHRjdXJsIiA+CjxkYzpjcmVhdG9yPjxyZGY6U2VxPjxyZGY6bGk+RWxlbmEgUGltdWtvdmE8L3JkZjpsaT48L3JkZjpTZXE+PC9kYzpjcmVhdG9yPjxkYzpkZXNjcmlwdGlvbj48cmRmOkFsdD48cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPkJsYW5rIGNhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbSBpbiB0d28gZGltZW5zaW9ucy4gUmVjdGFuZ3VsYXIgb3J0aG9nb25hbCBjb29yZGluYXRlIHBsYW5lIHdpdGggYXhlcyBYIGFuZCBZLiBNYXRoIHNjYWxlIHN5c3RlbSB0ZW1wbGF0ZS4gVmVjdG9yIGlsbHVzdHJhdGlvbiBpc29sYXRlZCBvbiB3aGl0ZSBiYWNrZ3JvdW5kPC9yZGY6bGk+PC9yZGY6QWx0PjwvZGM6ZGVzY3JpcHRpb24+CjxwbHVzOkxpY2Vuc29yPjxyZGY6U2VxPjxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPjxwbHVzOkxpY2Vuc29yVVJMPmh0dHBzOi8vd3d3LmlzdG9ja3Bob3RvLmNvbS9waG90by9saWNlbnNlLWdtMTQxMTUxODI3My0/dXRtX21lZGl1bT1vcmdhbmljJmFtcDt1dG1fc291cmNlPWdvb2dsZSZhbXA7dXRtX2NhbXBhaWduPWlwdGN1cmw8L3BsdXM6TGljZW5zb3JVUkw+PC9yZGY6bGk+PC9yZGY6U2VxPjwvcGx1czpMaWNlbnNvcj4KCQk8L3JkZjpEZXNjcmlwdGlvbj4KCTwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InciPz4K/+0BAlBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAADlHAJQAA5FbGVuYSBQaW11a292YRwCeAC8QmxhbmsgY2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtIGluIHR3byBkaW1lbnNpb25zLiBSZWN0YW5ndWxhciBvcnRob2dvbmFsIGNvb3JkaW5hdGUgcGxhbmUgd2l0aCBheGVzIFggYW5kIFkuIE1hdGggc2NhbGUgc3lzdGVtIHRlbXBsYXRlLiBWZWN0b3IgaWxsdXN0cmF0aW9uIGlzb2xhdGVkIG9uIHdoaXRlIGJhY2tncm91bmQcAm4ADEdldHR5IEltYWdlcwD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wgARCAJHAmQDAREAAhEBAxEB/8QAGwABAQEBAQEBAQAAAAAAAAAAAAYFAgQBAwf/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQK06AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPh5gek/m0Wda4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIk/YqSYNs0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATp7TVJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkHRPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnihAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnihAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnihAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnihAAAAAAAAAAAAB8I0/QrwAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAij0lYAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAA5Mw+GsAAAAAAAAcnjAAAAAAAAAAAAAAMM3AAAAAAAAAAAAAAYR2bh7AAAAAAADgzgAAAAAAAAAAAAADFNoAAAAAAAAAAAAAGEdG8aIAAAAAAAAAAAAAAAAAAAAABPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnihAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnihAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnihAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATxQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnihAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYhtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//xAAjEAABAwUBAAIDAQAAAAAAAAAEAAUUAQMV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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQAAAAAAAASSSSSSSSSSSSSSSSSSSSSSSSSSSSSSAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/EABQRAQAAAAAAAAAAAAAAAAAAAMD/2gAIAQMBAT8QL6//xAAUEQEAAAAAAAAAAAAAAAAAAADA/9oACAECAQE/EC+v/8QAJxAAAQQCAQMFAQADAAAAAAAAAQARwfAhMUFRYZFAYHGBoYCgsNH/2gAIAQEAAT8Q/vN9TTgBDkHrgPJQKQQg5BDj2RpAqjlAHbI+V15HEiwYd0RmAA5J4C1kPvnQPAEQZ59/Y4foeyTGg4QDA0D6JAI+ZzwBZh+I+SgbjJBwRDOhuM0JgQ5P630mYvMIOzv5A+vZLc5OG25wfxCwY44bIiT7MEZoC7APBQwRMAwH1/mECBAgQIECBAgQIECBAgQIECBAgQIEEAgg6KBMbCyXIcEsHsgSShtfQgbfbtj2YII6QQHeGD9AGe+OEDc6DMcmA9SCPHx7LEFDmEAafuD8puQJ4g7lmA2d/CI/ovkAzkEtjB6+iJIAXYANklXSVdJV0lXSVdJV0lXSVdJV0lXSVdJV0lXSVdJV0lXSVdJV0lXSVdJV0lXSVdJV0lXSVdJV0lXSVdJRPowMgNpPGirpKukq6SrpKukq6SrpKukq6SrpKukq6SrpKukq6SrpKukq6SrpKukq6SrpKukq6SrpKukq6SrpKLJYez2A1oYQ5rZYh+D/AISnwAexCOrs+gJqTqgOwrbPrbVq1atWrVq1atWrVq1atWrVq1atWrVq1aIZ8KQAy2T3PrbVq1atWrVq1atWrVq1atWrVq1atWrVq1aIpoA8AOjgG55TVIS5dt2drwUaZY3IOnQa4H+iaECBAgQIECBAgQIECBAgQIECBAgQIECBAjWu+YHNz4P97f/Z", + "w": 612, + "h": 583, + "mimeType": "image/jpeg", + "isAnimated": false + }, + "meta": {}, + "id": "asset:43572479", + "typeName": "asset" + }, + { + "type": "image", + "props": { + "name": "Screenshot 2023-08-10 at 9.54.06 AM.png", + "src": "data:image/png;base64,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EEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGC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rwoySzlK4MoKDqMgjEcAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBeQkQHOZdGzNDAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgU8JEByUAgIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII/H/pxgHAZkpI9AAAAABJRU5ErkJggg==", + "w": 1052, + "h": 112, + "mimeType": "image/png", + "isAnimated": false + }, + "meta": {}, + "id": "asset:814849268", + "typeName": "asset" + }, + { + "type": "image", + "props": { + "name": "coordinate-system.png", + "src": "data:image/png;base64,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xwj+tpagezCNj2V/q0PZiP4wg/tAELLugRnc5C6HfPrpp/atb33LDhw44AhHTrXtLofe8tH27dvt9ddft0cffdTq6uqcO+CWA/SmLBFIXDxvEx9kCQDdAelY1Lx1UxaAP/iSLABl+avQoMsZARGA+8y+i/qH7//yVNR/F1wA16DZn4CEL6P7mbff0RoCAYDZH6b/+irvrEz897m1++rQoUP23e9+1/h8++JP037ORTA8PGxDqO4WhdKbB+aGp556yv76r//ann/+eautrRUBeBDQZfJ9EiWAmQIY7zlrFAVKIwjQU1XjhICq9jxj/tVrygQJDVMICAEiIAJwn99BNJG2ERT2OdeHYj/dEef3r0VwX2ON11qw+C+Hj5/lexnZ79L5pnb897nkrL7iot7T0+MWdxKAHAng4s+F/hrU3I4dO2aHDx+2Tz75xOgyCKC627PPPmt/8zd/457pAuCxakIggx1/amQkWw0QZDGDwNIKnw8koNq8iBmRFLB+I0KgvBAQAbjPfDPI7/oY/P8o78sqf5TvbanPLv65lD6q9uWral9u0b9bBgBJwJkzZ+znP/+5vffee44A0AKwceNGe+GFF+xrX/ua7dix4z6j01dCQAgIASFQzgiIANxn9hn9Pwp9fxKBFAL+ma8fgowvF/0QVPu48FOvn37+fLXcrj/3zPuQECQh47pv3z77+7//e3v//fedlWDTpk329a9/3RGA9vZ2Z97JV7903dJAIPe7UrZIacynRiEEZoOACMB90ErC/x+B0A8bg/rytdO/Txfu+tXg4KDb/b/77rv2L//yL3bu3DlbuXKlPffcc/bNb37THnnkEfPRtCvT/13xK9cPM4j6T43SBTBh6eikQWACrBZxK9XV5lvWZB6kj6oJASFQPgiIANxnrln1j4GAbPne6d+nG3d8dfDgQfvOd75jJAAXLlywFStW2Je//GUX9Ld79273njs67erugK6sP0gO9Fv05PFsEGDvJUtHIm7RD7RvsKqnnzX/mrVljY8GLwTKDQERgCKa8Qns3Bjot3fvXmf6ZwAgJ3DPnj3O9M9nvg+FQkU0KnV1sRCg/O/Evg+dDkD87BkXDOitqXFSwLVffNWCmx9arK7oPkJACBQAAiIABTAJM+1Cd3e3vf32244A0O/POIDHHnvMRfu//PLLxhgACf/MFM3yO44EYPLjLAGI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", + "w": 256, + "h": 227, + "mimeType": "image/png", + "isAnimated": false + }, + "meta": {}, + "id": "asset:8475689", + "typeName": "asset" + }, + { + "id": "asset:1151615746", + "type": "image", + "typeName": "asset", + "props": { + "name": "pixel.png", + "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAANQTFRF////p8QbyAAAAApJREFUeJxjYAAAAAIAAUivpHEAAAAASUVORK5CYII=", + "w": 1, + "h": 1, + "mimeType": "image/png", + "isAnimated": false + }, + "meta": {} + } + ] +} \ No newline at end of file diff --git a/docs/overview.tldr b/docs/spheres.tldr similarity index 95% rename from docs/overview.tldr rename to docs/spheres.tldr index 8e9d60d..cacf97b 100644 --- a/docs/overview.tldr +++ b/docs/spheres.tldr @@ -73,9 +73,9 @@ { "id": "pointer:pointer", "typeName": "pointer", - "x": 2380.717073098672, - "y": -1882.200858564179, - "lastActivityTimestamp": 1693753541680, + "x": 8563.253390968892, + "y": -1486.0380517182352, + "lastActivityTimestamp": 1695236002633, "meta": {} }, { @@ -98,8 +98,8 @@ "screenBounds": { "x": 0, "y": 0, - "w": 1335, - "h": 972 + "w": 1720, + "h": 1065 }, "zoomBrush": null, "isGridMode": false, @@ -126,9 +126,9 @@ "typeName": "instance_page_state" }, { - "x": 1981.2627423281028, - "y": 2656.8088573779582, - "z": 0.1551187828992279, + "x": 1650.6137965311086, + "y": 4079.5927392182352, + "z": 0.1, "meta": {}, "id": "camera:page:uEZU1HSz7SqZ2Uxqq6Zuo", "typeName": "camera" @@ -4186,443 +4186,6 @@ "id": "shape:kS_xGSRxHq6kqgvcOoO_V", "typeName": "shape" }, - { - "x": 8217.057162725016, - "y": 1473.5108264285882, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "image", - "props": { - "w": 6866.369673402156, - "h": 731.0203454572638, - "assetId": "asset:814849268", - "playing": true, - "url": "", - "crop": null - }, - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "au", - "id": "shape:LQ7VYHfT_59lkzS-mOGnD", - "typeName": "shape" - }, - { - "x": 8272.167074723866, - "y": -231.22657301491654, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "geo", - "props": { - "w": 454.8896361744155, - "h": 1022.0345912535959, - "geo": "rectangle", - "color": "black", - "labelColor": "black", - "fill": "none", - "dash": "draw", - "size": "m", - "font": "draw", - "text": "", - "align": "middle", - "verticalAlign": "middle", - "growY": 0, - "url": "" - }, - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "av", - "id": "shape:CnwDcmII_t296x3lkKtFP", - "typeName": "shape" - }, - { - "x": 8904.07069829703, - "y": -817.6850953418113, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "text", - "props": { - "color": "black", - "size": "xl", - "w": 159.890625, - "text": "90 deg", - "font": "draw", - "align": "middle", - "autoSize": true, - "scale": 1 - }, - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "aZ8", - "id": "shape:PFe-0RRWKAKsdkGT4mKqr", - "typeName": "shape" - }, - { - "x": 8345.957313540965, - "y": -1049.8087810434195, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "text", - "props": { - "color": "black", - "size": "xl", - "w": 179.0703125, - "text": "180 deg", - "font": "draw", - "align": "middle", - "autoSize": true, - "scale": 1.0175342344114682 - }, - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "abf", - "id": "shape:o2Ft4PGowrSOr47-UamY9", - "typeName": "shape" - }, - { - "x": 67.8754837299798, - "y": 47.21755527336745, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "geo", - "props": { - "w": 696.8285122982894, - "h": 696.8285122982894, - "geo": "ellipse", - "color": "black", - "labelColor": "black", - "fill": "solid", - "dash": "draw", - "size": "m", - "font": "draw", - "text": "", - "align": "middle", - "verticalAlign": "middle", - "growY": 0, - "url": "" - }, - "parentId": "shape:WgCT0wkzM1R-BbbSbN6Ir", - "index": "a1V", - "id": "shape:TXO1JaRhTgSRoeYgx6MJh", - "typeName": "shape" - }, - { - "x": 46.28643898099608, - "y": 407.41411678032, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "arrow", - "parentId": "shape:WgCT0wkzM1R-BbbSbN6Ir", - "index": "a2V", - "props": { - "dash": "draw", - "size": "m", - "fill": "solid", - "color": "black", - "labelColor": "black", - "bend": 0, - "start": { - "type": "point", - "x": 0, - "y": 0 - }, - "end": { - "type": "point", - "x": 748.456731641716, - "y": 0.8493324275289126 - }, - "arrowheadStart": "arrow", - "arrowheadEnd": "arrow", - "text": "", - "font": "sans" - }, - "id": "shape:le363Xgw9ILO0dnCjvTq1", - "typeName": "shape" - }, - { - "x": 406.78981186913046, - "y": 19.967466381366876, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "arrow", - "parentId": "shape:WgCT0wkzM1R-BbbSbN6Ir", - "index": "a3V", - "props": { - "dash": "draw", - "size": "m", - "fill": "solid", - "color": "black", - "labelColor": "black", - "bend": 0, - "start": { - "type": "point", - "x": 0, - "y": 0 - }, - "end": { - "type": "point", - "x": -0.6459194614203337, - "y": 764.5199360694071 - }, - "arrowheadStart": "arrow", - "arrowheadEnd": "arrow", - "text": "", - "font": "draw" - }, - "id": "shape:QuPzuPNF8BNYYaWMI4AJk", - "typeName": "shape" - }, - { - "x": 429.885116346953, - "y": 760.4997480093755, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "text", - "props": { - "color": "black", - "size": "m", - "w": 20.52835900614501, - "text": "Y", - "font": "sans", - "align": "middle", - "autoSize": true, - "scale": 1.2830224378840631 - }, - "parentId": "shape:WgCT0wkzM1R-BbbSbN6Ir", - "index": "a4V", - "id": "shape:fqrkrap26fTpbnwoKkEoJ", - "typeName": "shape" - }, - { - "x": 418.7933362357916, - "y": 0, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "text", - "props": { - "color": "black", - "size": "m", - "w": 31.09324689309659, - "text": "-Y", - "font": "sans", - "align": "middle", - "autoSize": true, - "scale": 1.2830224378840631 - }, - "parentId": "shape:WgCT0wkzM1R-BbbSbN6Ir", - "index": "a5V", - "id": "shape:yLjtNV8toXx15TwY9GFiy", - "typeName": "shape" - }, - { - "x": 0, - "y": 388.3400678576322, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "text", - "props": { - "color": "black", - "size": "m", - "w": 25.1015625, - "text": "-X", - "font": "sans", - "align": "middle", - "autoSize": true, - "scale": 1.2830224378840631 - }, - "parentId": "shape:WgCT0wkzM1R-BbbSbN6Ir", - "index": "a6V", - "id": "shape:VITSKZNi6pCbkPITvWAjr", - "typeName": "shape" - }, - { - "x": 798.9936461431382, - "y": 387.8216090690489, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "text", - "props": { - "color": "black", - "size": "m", - "w": 20.969397969167655, - "text": "X", - "font": "sans", - "align": "middle", - "autoSize": true, - "scale": 1.2830224378840631 - }, - "parentId": "shape:WgCT0wkzM1R-BbbSbN6Ir", - "index": "a8", - "id": "shape:y5Z2bjJ_BaKo8LpviVLU0", - "typeName": "shape" - }, - { - "x": 8037.104238963189, - "y": -1182.1769350402412, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "group", - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "aIt4", - "props": {}, - "id": "shape:WgCT0wkzM1R-BbbSbN6Ir", - "typeName": "shape" - }, - { - "x": 7800.474579333158, - "y": -834.4879771612282, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "text", - "props": { - "color": "black", - "size": "xl", - "w": 188.2265625, - "text": "270 deg", - "font": "draw", - "align": "middle", - "autoSize": true, - "scale": 1.0175342344114682 - }, - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "abt", - "id": "shape:Xo4Cx1pX8FYQJjypdQFki", - "typeName": "shape" - }, - { - "x": 9349.520072241889, - "y": -258.163687206718, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "arrow", - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "aIt6", - "props": { - "dash": "draw", - "size": "xl", - "fill": "solid", - "color": "black", - "labelColor": "black", - "bend": 58.28815129448117, - "start": { - "type": "binding", - "boundShapeId": "shape:TXO1JaRhTgSRoeYgx6MJh", - "normalizedAnchor": { - "x": 0.49789846091471335, - "y": 0.7868841502035268 - }, - "isExact": true - }, - "end": { - "type": "point", - "x": -455.3650259982719, - "y": -523.5691446449982 - }, - "arrowheadStart": "bar", - "arrowheadEnd": "none", - "text": "", - "font": "mono" - }, - "id": "shape:2khfmpp7zg12MiCqN3No-", - "typeName": "shape" - }, - { - "x": 8876.887013340933, - "y": -811.6521537047781, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "arrow", - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "aItd", - "props": { - "dash": "draw", - "size": "xl", - "fill": "solid", - "color": "black", - "labelColor": "black", - "bend": 167.03745946457875, - "start": { - "type": "point", - "x": 15.542857136722432, - "y": 23.17594613894488 - }, - "end": { - "type": "point", - "x": -882.0964743464142, - "y": 19.747294931123463 - }, - "arrowheadStart": "none", - "arrowheadEnd": "none", - "text": "", - "font": "mono" - }, - "id": "shape:8teW8SFoyI0rL4OAlhmWR", - "typeName": "shape" - }, - { - "x": 7990.656627253442, - "y": -787.0494112562494, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "arrow", - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "aIt5", - "props": { - "dash": "draw", - "size": "xl", - "fill": "solid", - "color": "black", - "labelColor": "black", - "bend": 39.897221530040014, - "start": { - "type": "point", - "x": 0, - "y": 0 - }, - "end": { - "type": "binding", - "boundShapeId": "shape:TXO1JaRhTgSRoeYgx6MJh", - "normalizedAnchor": { - "x": 0.4721443941478094, - "y": 0.784641958175453 - }, - "isExact": true - }, - "arrowheadStart": "none", - "arrowheadEnd": "arrow", - "text": "", - "font": "mono" - }, - "id": "shape:79xux0QQ-sIUZ466x0Exj", - "typeName": "shape" - }, { "x": 1006.5364908533305, "y": 622.1724782802919, @@ -4630,7 +4193,6 @@ "isLocked": false, "opacity": 1, "meta": {}, - "id": "shape:AQzu5e64eKuhuVxH4SdfJ", "type": "image", "props": { "w": 952.8005305002758, @@ -4642,6 +4204,7 @@ }, "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", "index": "aw", + "id": "shape:AQzu5e64eKuhuVxH4SdfJ", "typeName": "shape" }, { @@ -4716,22 +4279,6 @@ }, { "type": "image", - "props": { - "name": "Screenshot 2023-08-10 at 9.54.06 AM.png", - "src": "data:image/png;base64,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EEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJEByG3yILRAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAGCgxpAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeEJPLOCw3e/+2+n559/brp9+85069bN6ebNmyePn5+ee+650+PGjRvTjRvPnRzXp+vX4zrO83HtWpyvTdeuzUeMX73aHl89Hb969eoXY3E+O65ciesr03xeXsfYPH5yWlzH2Px4rpb5cbZyPv/889PQOMflfH547vrz6eHDeP7hY+eHD2NejJ0dn33Wrj+bPvssjoen55jz4MGDL64/O72Oxw8etOtPp08/jccPTs6fnByfTvfvfzJ98kkc96ePP/54+uijj6cPP/zF9ItffDj95m/+x5N9upP9s8VdEgK//du/Mb3zzs8erTZ6LHoz+vG556IPz/oyrs/3ZuvR+RzPn/Xo3K/XT/sznm/9+/h57t8YO+vh+fratdbHkfPqox4+u75y2vNn/T3385yn9XbMOWnoaT7PPd+ea30fz8e/fK8v+/uky0/7/Ms9Pff33M+P9+/cy9GbrUc/PdebH5325RtvfHO6c+fuvFz/+cwSeOutfz/97d/+7/TfFz0Sr6dzPy5fP8/68MvPtdfU1rPRh9ce9fSynyP/4308x86vy+01ee7b1tvzufX2/Fzr+ThHzuXj+bqNza/dbezi1/P474hln8+P2+t5xMR1z7+5r+P1ufVue819cNKf8Zr6yclr5/2Ttb9ysvbbPanNvaQE/uAPvjf91V/9z6909VHH0U/xejz3YfTHst/mfmx9evZ++WzOHDf3eLs+O3+5vx/PcZb/y+NtLefnXPzfC4+ve46N1+wYX/73wlnPz/9dMD+O1+wnN3W8Br/77nTyvvbJc77SjXTz3Qj80R99f/rRj/7bbvlGSRT1HX05v8du/Ro90PrsrFeXvTT3cryWnz1/Njb3Znu/Hp+x53vEeHu/sHyvcDbWYub39DF+FjuvMR7P42fvMdrjOU+s8+c/v3JyjELZOqoI/Nmf/dfpj//4B1Xpn6m80dNnPXS+b9vr6eP91vq1xc3n+Cx+/Yvv0drn+Pl7tfhcMH/vFp/xnzv9Hi6+i4vP/XFcu/bSyefXl54prv6Yiwn85V/+j+kP//A/Xfyk0d0JxFvV6Mvou+jb9j33/D3b/F3b3JPRo3NP3rp16+Q7n9snx53plVdenX7pl/7p7uuScCwCf/M3/2v6/d//D2MtymoeEYj31Ldv355eeOGF6aWXXpq+/vV/PP3qr/7rR8+7eHYJ/Oxn/3f6nd/5N8/uH/iM/WV37/796Xd/9/vP2F91Of+cZ1Zw+LVfe/3kBeHW6YvBiy++ePrCEG/c2tE+XM0fvOYPXXE9/9A6n+cfWONN4fzhbfmBrn0B1M7zF6PtC9L5vByL6/bFUZzjaGPtHCUU41v+xQ8k8e/xH0pCXGg/gjZhYT7HD52PCw3zD6FLgSHmzPLCLDSErBBjcY4jngtxoT2+f//+Fz+WfnIiNcwyQ5w/+uijR8cHH3wwxfHee++dfCH87vTDH/7F9OKLfkjdsveXIfaXf/kfTT/96U8eLTV6Kt60RT+2Lz3ivDzmD2CznNT6s/VtPH7SMX/hMj/fejf6tfVz6914rl3HuV23/m1j8Tjmxrkd8Vy7Xp5bf8dYu45zuw4AcZ391/q5nZc9HNfLvo7+XPbwLB3NvTsLR3OfRn9++OGHJ2LDL06+CP75aV9+85u/Md29+7XsMsVdEgK//uv/bNOPqNEX0cPLXoyxtY/b3HZuPdoex/n8dRtbnlvvtrHl43Yd53bEvHZ9/hy928Zab8fj5XXr5zbWeryN9/Z49POyl9vrbry2hhQYR/Tn9ev/8GRtf++SVJdlbiHwne/8y+lP//S/bEmxOTbqOHqlvUdufdP67EnnZR8v51w0ftFYxMR4ey76r+VpY+1xO8eceG45d/nc+fF4HEf0cMw7/zjG2/Nx/Xf1dPTu229fmd5/P//avnmzJHgqBH7v974z/eAHz96PNVHf0T/R661vWl8sH190vezJdn3ROcaW43Hd7teeOz/W/runneP+cd0et3OLa+cYj/59552rJ8dTKQ03+QoJfP/7352+971/9xWu4PLcOvqi9dCT+nnZj+269VqLjc/ry+vl5/f2XVuc40ea+QfUO6c/oMZn/xs3Xjl5z3vv8kCz0jSBP/mT/zz91m/9q3S8wD4C7bU8eq71Z5xbf0ZPtu/E2w+o0ZN37949Pb7+9dem1177Vt9Nzb50BH784/8+ffvb/+LSrfsoC47X6ejJl19+ebp37970xhvfmN58862j/PmH/jt/8pP/M/3Kr/yTQzO4TH/81772D6Y///OfXqYlP7NrJTh88QVJ+4DWvhRpH+TiQ19cn//wFy84MdbOyy9BYyweL8faF6PxXLzpjKONtXNUWYxv+Rc/kMS/8z98nn/cfkRZ/hDafhhtY+2H0eWPo3EdP7a0M8Fhy24dL5bgMPd97PyWXm/93M6tn9u59XA8bn3cfiyNc5ORCA7H68GL/mKCw5n0EK/R7TV8eX3+9by9lsd4O9pr+/L1/SLeTxqLfm493Hq39SvB4UnUnu1xgsPZj6HRc+29+EXvy9t78nhuObfFtH5uj9v8GI8evujx+b7/u163o2cJDs92P7a/juCw/H9J+LKA2PrzonOMLcfjOn54if5rz50fi+fbWJxjbvvRZjm+vG7PR38THFrlPttngsP6/Y2+aD0S/XT+iF666Fj2Yly378/adfsBNc4Eh/X78azPJDg83R2O96rRvwSHp8v9st2N4DD2jsXrNMFh7D2qWh3BoYpsTV6CQw3XTFaCA8HhsR9U4ofR9uNo+2E0HrcfR+Oa4JBpNTFBgOBAcNAJ4xEgOBAcxqtKKwoCBIezH0Pji572I0x8cduul+eYE88t57bnY+z8eBsjOOi3HgIEh4t/EG291vrzonOMLcfjOn4cjdj23Pmx5Y+qLTbGzo+3uHaO56PHCQ491X155xIc1u9d9EXroda3y3P00EXHsufimuCwnvmRZxIcnu7uExyeLu/LejeCw9g7F6/TBIex96hqdQSHKrI1eQkONVwzWQkOX3xB0j6gtS9F2oe69oXL8kNfXMcLzvK8/F95xXPxeDkW1/FmM56LcxxtrJ1jA2N8y7/4X4DGv/P/y+7zj9v/SrTJDMvHbYzgsGUnxF5EgOBAcLioLox9tQQIDgSHr7YC3f1JBAgOZz+GtvfdT3pf3t6Tx/v35dwYb8+dH4/HccT78OWc9jjO7fnle/WL9sv/g8NFVJ7NMYIDweHZrOzL/VcRHNbvX7yuERzW8zJzGwGCwzZ+vdHxfXK8F/b/4NBL7ljzCQ5j73e8ThMcxt6jqtURHKrI1uQlONRwzWQlOBAc/D84ZDpHTIoAwYHgkCocQaUECA4Eh9ICkzxNgOBAcEgXj8AyAgQHgkNZcUmcJkBwWI+O4LCelZnbCRActjPsyUBw6KF13LkEh7H3nuAw9v5Uro7gUEl3/9wEh/2ZZjMSHAgOBIds94jrJkBwIDh0F42AcgIEB4JDeZG5QYoAwYHgkCocQaUECA4Eh9ICkzxFgOCwHhvBYT0rM7cTIDhsZ9iTYavg8Oqrr02vv/6tnluaewkJEBzG3jSCw9j7U7k6gkMl3f1zExz2Z5rNSHAgOBAcst0jrpsAwYHg0F00AsoJEBwIDuVF5gYpAgQHgkOqcASVEiA4EBxKC0zyFAGCw3psBIf1rMzcToDgsJ1hTwaCQw+t484lOIy99wSHsfencnUEh0q6++cmOOzPNJuR4EBwIDhku0dcNwGCA8Ghu2gElBMgOBAcyovMDVIECA4Eh1ThCColQHAgOJQWmOQpAgSH9dgIDutZmbmdAMFhO8OeDASHHlrHnUtwGHvvCQ5j70/l6ggOlXT3z01w2J9pNiPBgeBAcMh2j7huAgQHgkN30QgoJ0BwIDiUF5kbpAgQHAgOqcIRVEqA4EBwKC0wyVMECA7rsREc1rMyczsBgsN2hj0ZCA49tI47l+Aw9t4THMben8rVERwq6e6fm+CwP9NsRoIDwYHgkO0ecd0ECA4Eh+6iEVBOgOBAcCgvMjdIESA4EBxShSOolADBgeBQWmCSpwgQHNZjIzisZ2XmdgIEh+0MezIQHHpoHXcuwWHsvSc4jL0/lasjOFTS3T83wWF/ptmMBAeCA8Eh2z3iugkQHAgO3UUjoJwAwYHgUF5kbpAiQHAgOKQKR1ApAYIDwaG0wCRPESA4rMdGcFjPysztBAgO2xn2ZCA49NA67lyCw9h7T3AYe38qV0dwqKS7f26Cw/5MsxkJDgQHgkO2e8R1EyA4EBy6i0ZAOQGCA8GhvMjcIEWA4EBwSBWOoFICBAeCQ2mBSZ4iQHBYj43gsJ6VmdsJEBy2M+zJQHDooXXcuQSHsfee4DD2/lSujuBQSXf/3ASH/ZlmMxIcCA4Eh2z3iOsmQHAgOHQXjYByAgQHgkN5kblBigDBgeCQKhxBpQQIDgSH0gKTPEWA4LAeG8FhPSsztxMgOGxn2JOB4NBD67hzCQ5j7z3BYez9qVwdwaGS7v65CQ77M81mJDgQHAgO2e4R102A4EBw6C4aAeUECA4Eh/Iic4MUAYIDwSFVOIJKCRAcCA6lBSZ5igDBYT02gsN6VmZuJ0Bw2M6wJwPBoYfWcecSHMbee4LD2PtTuTqCQyXd/XMTHPZnms1IcCA4EByy3SOumwDBgeDQXTQCygkQHAgO5UXmBikCBAeCQ6pwBJUSIDgQHEoLTPIUAYLDemwEh/WszNxOgOCwnWFPBoJDD63jziU4jL33BIex96dydQSHSrr75yY47M80m5HgQHAgOGS7R1w3AYIDwaG7aASUEyA4EBzKi8wNUgQIDgSHVOEIKiVAcCA4lBaY5CkCBIf12AgO61mZuZ0AwWE7w54MBIceWsedS3AYe+8JDmPvT+XqCA6VdPfPTXDYn2k2I8GB4EBwyHaPuG4CBAeCQ3fRCCgnQHAgOJQXmRukCBAcCA6pwhFUSoDgQHAoLTDJUwQIDuuxERzWszJzOwGCw3aGPRkIDj20jjuX4DD23hMcxt6fytURHCrp7p+b4LA/02xGggPBgeCQ7R5x3QQIDgSH7qIRUE6A4EBwKC8yN0gRIDgQHFKFI6iUAMGB4FBaYJKnCBAc1mMjOKxnZeZ2AgSH7Qx7MhAcemgddy7BYey9JziMvT+VqyM4VNLdPzfBYX+m2YwEB4IDwSHbPeK6CRAcCA7dRSOgnADBgeBQXmRukCJAcCA4pApHUCkBggPBobTAJE8RIDisx0ZwWM/KzO0ECA7bGfZkIDj00DruXILD2HtPcBh7fypXR3CopLt/boLD/kyzGQkOBAeCQ7Z7xHUTIDgQHLqLRkA5AYIDwaG8yNwgRYDgQHBIFY6gUgIEB4JDaYFJniJAcFiPjeCwnpWZ2wkQHLYz7MlAcOihddy5BIex957gMPb+VK6O4FBJd//cBIf9mWYzEhwIDgSHbPeI6yZAcCA4dBeNgHICBAeCQ3mRuUGKAMGB4JAqHEGlBAgOBIfSApM8RYDgsB4bwWE9KzO3EyA4bGfYk4Hg0EPruHMJDmPvPcFh7P2pXB3BoZLu/rkJDvszzWYkOBAcCA7Z7hHXTYDgQHDoLhoB5QQIDgSH8iJzgxQBggPBIVU4gkoJEBwIDqUFJnmKAMFhPTaCw3pWZm4nQHDYzrAnA8Ghh9Zx5xIcxt57gsPY+1O5OoJDJd39cxMc9meazUhwIDgQHLLdI66bAMGB4NBdNALKCRAcCA7lReYGKQIEB4JDqnAElRIgOBAcSgtM8hQBgsN6bASH9azM3E6A4LCdYU8GgkMPrePO/fGPfzR9+9v//LgABv/LCQ6Db1Dh8ggOhXALUhMcCqAmUxIcCA4Eh2TzCOsnQHAgOPRXjYhqAgQHgkN1jcmfI0BwIDjkKkdUJQGCA8Ghsr7kzhEgOKznRnBYz8rM7QQIDtsZ9mQgOPTQOu5cgsPYe09wGHt/KldHcKiku39ugsP+TLMZCQ4EB4JDtnvEdRMgOBAcuotGQDkBggPBobzI3CBFgOBAcEgVjqBSAgQHgkNpgUmeIkBwWI+N4LCelZnbCRActjPsyUBw6KF13LkEh7H3nuAw9v5Uro7gUEl3/9wEh/2ZZjMSHAgOBIds94jrJkBwIDh0F42AcgIEB4JDeZG5QYoAwYHgkCocQaUECA4Eh9ICkzxFgOCwHhvBYT0rM7cTIDhsZ9iTgeDQQ+u4cwkOY+89wWHs/alcHcGhku7+uQkO+zPNZiQ4EBwIDtnuEddNgOBAcOguGgHlBAgOBIfyInODFAGCA8EhVTiCSgkQHAgOpQUmeYoAwWE9NoLDelZmbidAcNjOsCcDwaGH1nHnEhzG3nuCw9j7U7k6gkMl3f1zExz2Z5rNSHAgOBAcst0jrpsAwYHg0F00AsoJEBwIDuVF5gYpAgQHgkOqcASVEiA4EBxKC0zyFAGCw3psBIf1rMzcToDgsJ1hTwaCQw+t484lOIy99wSHsfencnUEh0q6++cmOOzPNJuR4EBwIDhku0dcNwGCA8Ghu2gElBMgOBAcyovMDVIECA4Eh1ThCColQHAgOJQWmOQpAgSH9dgIDutZmbmdAMFhO8OeDASHHlrHnUtwGHvvCQ5j70/l6ggOlXT3z01w2J9pNiPBgeBAcMh2j7huAgQHgkN30QgoJ0BwIDiUF5kbpAgQHAgOqcIRVEqA4EBwKC0wyVMECA7rsREc1rMyczsBgsN2hj0ZCA49tI47l+Aw9t4THMben8rVERwq6e6fm+CwP9NsRoIDwYHgkO0ecd0ECA4Eh+6iEVBOgOBAcCgvMjdIESA4EBxShSOolADBgeBQWmCSpwgQHNZjIzisZ2XmdgIEh+0MezIQHHpoHXcuwWHsvSc4jL0/lasjOFTS3T83wWF/ptmMBAeCA8Eh2z3iugkQHAgO3UUjoJwAwYHgUF5kbpAiQHAgOKQKR1ApAYIDwaG0wCRPESA4rMdGcFjPysztBAgO2xn2ZCA49NA67lyCw9h7T3AYe38qV0dwqKS7f26Cw/5MsxkJDgQHgkO2e8R1EyA4EBy6i0ZAOQGCA8GhvMjcIEWA4EBwSBWOoFICBAeCQ2mBSZ4iQHBYj43gsJ6VmdsJEBy2M+zJQHDooXXcuQSHsfee4DD2/lSujuBQSXf/3ASH/ZlmMxIcCA4Eh2z3iOsmQHAgOHQXjYByAgQHgkN5kblBigDBgeCQKhxBpQQIDgSH0gKTPEWA4LAeG8FhPSsztxMgOGxn2JOB4NBD67hzCQ5j7z3BYez9qVwdwaGS7v65CQ77M81mJDgQHAgO2e4R102A4EBw6C4aAeUECA4Eh/Iic4MUAYIDwSFVOIJKCRAcCA6lBSZ5igDBYT02gsN6VmZuJ0Bw2M6wJwPBoYfWcecSHMbee4LD2PtTuTqCQyXd/XMTHPZnms1IcCA4EByy3SOumwDBgeDQXTQCygkQHAgO5UXmBikCBAeCQ6pwBJUSIDgQHEoLTPIUAYLDemwEh/WszNxOgOCwnWFPBoJDD63jziU4jL33BIex96dydQSHSrr75yY47M80m5HgQHAgOGS7R1w3AYIDwaG7aASUEyA4EBzKi8wNUgQIDgSHVOEIKiVAcCA4lBaY5CkCBIf12AgO61mZuZ0AwWE7w54MBIceWsedS3AYe+8JDmPvT+XqCA6VdPfPTXDYn2k2I8GB4EBwyHaPuG4CBAeCQ3fRCCgnQHAgOJQXmRukCBAcCA6pwhFUSoDgQHAoLTDJUwQIDuuxERzWszJzOwGCw3aGPRkIDj20jjuX4DD23hMcxt6fytURHCrp7p+b4LA/02xGggPBgeCQ7R5x3QQIDgSH7qIRUE6A4EBwKC8yN0gRIDgQHFKFI6iUAMGB4FBaYJKnCBAc1mMjOKxnZeZ2AgSH7Qx7MhAcemgddy7BYey9JziMvT+VqyM4VNLdPzfBYX+m2YwEB4IDwSHbPeK6CRAcCA7dRSOgnADBgeBQXmRukCJAcCA4pApHUCkBggPBobTAJE8RIDisx0ZwWM/KzO0ECA7bGfZkIDj00DruXILD2HtPcBh7fypXR3CopLt/boLD/kyzGQkOBAeCQ7Z7xHUTIDgQHLqLRkA5AYIDwaG8yNwgRYDgQHBIFY6gUgIEB4JDaYFJniJAcFiPjeCwnpWZ2wkQHLYz7MlAcOihddy5BIex957gMPb+VK6O4FBJd//cBIf9mWYzEhwIDgSHbPeI6yZAcCA4dBeNgHICBAeCQ3mRuUGKAMGB4JAqHEGlBAgOBIfSApM8RYDgsB4bwWE9KzO3EyA4bGfYk4Hg0EPruHMJDmPvPcFh7P2pXB3BoZLu/rkJDvszzWYkOBAcCA7Z7hHXTYDgQHDoLhoB5QQIDgSH8iJzgxQBggPBIVU4gkoJEBwIDqUFJnmKAMFhPTaCw3pWZm4nQHDYzrAnA8Ghh9Zx5xIcxt57gsPY+1O5OoJDJd39cxMc9meazUhwIDgQHLLdI66bAMGB4NBdNALKCRAcCA7lReYGKQIEB4JDqnAElRIgOBAcSgtM8hQBgsN6bASH9azM3E6A4LCdYU8GgkMPrePOJTiMvfcEh7H3p3J1BIdKuvvnJjjszzSbkeBAcCA4ZLtHXDcBggPBobtoBJQTIDgQHMqLzA1SBAgOBIdU4QgqJUBwIDiUFpjkKQIEh/XYCA7rWZm5nQDBYTvDngwEhx5ax51LcBh77wkOY+9P5eoIDpV0989NcNifaTYjwYHgQHDIdo+4bgIEB4JDd9EIKCdAcCA4lBeZG6QIEBwIDqnCEVRKgOBAcCgtMMlTBAgO67ERHNazMnM7AYLDdoY9GQgOPbSOO5fgMPbeExzG3p/K1REcKunun5vgsD/TbEaCA8GB4JDtHnHdBAgOBIfuohFQToDgQHAoLzI3SBEgOBAcUoUjqJQAwYHgUFpgkqcIEBzWYyM4rGdl5nYCBIftDHsyEBx6aB13LsFh7L0nOIy9P5WrIzhU0t0/N8Fhf6bZjAQHggPBIds94roJEBwIDt1FI6CcAMGB4FBeZG6QIkBwIDikCkdQKQGCA8GhtMAkTxEgOKzHRnBYz8rM7QQIDtsZ9mQgOPTQOu5cgsPYe09wGHt/KldHcKiku39ugsP+TLMZCQ4rBIfr169PN27cmOLcjnjBiet2vnr16un18nz+Ot5sxvw4xxHPL8+xifF4y7/PP//8NDzOcTx8+PD0OP+4jX/22WeP5sRYPG5jDx48ePQ4rtvjTz/99HQ8znHE+CeffHJ6HY/v379/+jjG4vrjjz8+PX/00UdTOz744IMpjvfee2969913px/+8C+mF1+8u+VPF3sJCBAcCA6XoEwPt0SCA8HhcEV/Sf5gggPB4ZKU6qGWSXA4+zzcPhcvPye364vOMbYcj+vnTj6LR5723PmxeL6NxTnmxtj58eWc9nx87n7nnasnx6FK9JB/LMFh/bZHX7QeaT28PEcvXXQsey6un3/++Ud54np53Lx5c2rH7du3p1u3bk137tw5PV544YWT/K+cfAd1b/2izby0BAgOT3fr4vvk6N/oudbnrV+jR6Mv47k4ojejH+O4e/fu6fHqq69Nr7/+rae7aHd76gQIDk8dedcN43U6evLll1+e7t27N73xxjemN998qyuHyZeTAMHhcu0bwWGc/SI4fPEFSfuAtvxyJK7bFy7LD31xHS84y/NSZojn4vFyrMkM8Vy86VyKDe25KAuCwzjNYSX7EyA4EBz2ryoZtxIgOBActtaQ+BoCBIezH0Pb++4nvS9v78njvftyboy3586Px+M44n34ck57HOf2/PK9+kW7HZLw229fmd5/f5uofFFuY2MRIDgQHMaqSKsJAgSH9XUQr2vth8/2Grk8x+voRUfExHiLbd+fLX88bZJDkxviTHBYvzfP4kyCw9PdVYLD0+V9We9GcBh75+J1muAw9h5VrY7gUEW2Ji/BoYZrJivBgeDg/8Eh0zliUgQIDgSHVOEIKiVAcCA4lBaY5GkCBAeCQ7p4BJYRIDgQHMqKS+I0AYLDenQEh/WszNxOgOCwnWFPBoJDD63jziU4jL33BIex96dydQSHSrr75yY47M80m5HgQHAgOGS7R1w3AYIDwaG7aASUEyA4EBzKi8wNUgQIDgSHVOEIKiVAcCA4lBaY5CkCBIf12AgO61mZuZ0AwWE7w54MBIceWsedS3AYe+8JDmPvT+XqCA6VdPfPTXDYn2k2I8GB4EBwyHaPuG4CBAeCQ3fRCCgnQHAgOJQXmRukCBAcCA6pwhFUSoDgQHAoLTDJUwQIDuuxERzWszJzOwGCw3aGPRkIDj20jjuX4DD23hMcxt6fytURHCrp7p+b4LA/02xGggPBgeCQ7R5x3QQIDgSH7qIRUE6A4EBwKC8yN0gRIDgQHFKFI6iUAMGB4FBaYJKnCBAc1mMjOKxnZeZ2AgSH7Qx7MhAcemgddy7BYey9JziMvT+VqyM4VNLdPzfBYX+m2YwEB4IDwSHbPeK6CRAcCA7dRSOgnADBgeBQXmRukCJAcCA4pApHUCkBggPBobTAJE8RIDisx0ZwWM/KzO0ECA7bGfZkIDj00DruXILD2HtPcBh7fypXR3CopLt/boLD/kyzGQkOBAeCQ7Z7xHUTIDgQHLqLRkA5AYIDwaG8yNwgRYDgQHBIFY6gUgIEB4JDaYFJniJAcFiPjeCwnpWZ2wkQHLYz7MlAcOihddy5BIex957gMPb+VK6O4FBJd//cBIf9mWYzEhwIDgSHbPeI6yZAcCA4dBeNgHICBAeCQ3mRuUGKAMGB4JAqHEGlBAgOBIfSApM8RYDgsB4bwWE9KzO3EyA4bGfYk4Hg0EPruHMJDmPvPcFh7P2pXB3BoZLu/rkJDvszzWYkOBAcCA7Z7hHXTYDgQHDoLhoB5QQIDgSH8iJzgxQBggPBIVU4gkoJEBwIDqUFJnmKAMFhPTaCw3pWZm4nQHDYzrAnA8Ghh9Zx5xIcxt57gsPY+1O5OoJDJd39cxMc9meazUhwIDgQHLLdI66bAMGB4NBdNALKCRAcCA7lReYGKQIEB4JDqnAElRIgOBAcSgtM8hQBgsN6bASH9azM3E6A4LCdYU8GgkMPrePOJTiMvfcEh7H3p3J1BIdKuvvnJjjszzSbkeBAcCA4ZLtHXDcBggPBobtoBJQTIDgQHMqLzA1SBAgOBIdU4QgqJUBwIDiUFpjkKQIEh/XYCA7rWZm5nQDBYTvDngwEhx5ax51LcBh77wkOY+9P5eoIDpV0989NcNifaTYjwYHgQHDIdo+4bgIEB4JDd9EIKCdAcCA4lBeZG6QIEBwIDqnCEVRKgOBAcCgtMMlTBAgO67ERHNazMnM7AYLDdoY9GQgOPbSOO5fgMPbeExzG3p/K1REcKunun5vgsD/TbEaCA8GB4JDtHnHdBAgOBIfuohFQToDgQHAoLzI3SBEgOBAcUoUjqJQAwYHgUFpgkqcIEBzWYyM4rGdl5nYCBIftDHsyEBx6aB13LsFh7L0nOIy9P5WrIzhU0t0/N8Fhf6bZjAQHggPBIds94roJEBwIDt1FI6CcAMGB4FBeZG6QIkBwIDikCkdQKQGCA8GhtMAkTxEgOKzHRnBYz8rM7QQIDtsZ9mQgOPTQOu5cgsPYe09wGHt/KldHcKiku39ugsP+TLMZCQ4EB4JDtnvEdRMgOBAcuotGQDkBggPBobzI3CBFgOBAcEgVjqBSAgQHgkNpgUmeIkBwWI+N4LCelZnbCRActjPsyUBw6KF13LkEh7H3nuAw9v5Uro7gUEl3/9wEh/2ZZjMSHAgOBIds94jrJkBwIDh0F42AcgIEB4JDeZG5QYoAwYHgkCocQaUECA4Eh9ICkzxFgOCwHhvBYT0rM7cTIDhsZ9iTgeDQQ+u4cwkOY+89wWHs/alcHcGhku7+uQkO+zPNZiQ4EBwIDtnuEddNgOBAcOguGgHlBAgOBIfyInODFAGCA8EhVTiCSgkQHAgOpQUmeYoAwWE9NoLDelZmbidAcNjOsCcDwaGH1nHnEhzG3nuCw9j7U7k6gkMl3f1zExz2Z5rNSHAgOBAcst0jrpsAwYHg0F00AsoJEBwIDuVF5gYpAgQHgkOqcASVEiA4EBxKC0zyFAGCw3psBIf1rMzcToDgsJ1hTwaCQw+t484lOIy99wSHsfencnUEh0q6++cmOOzPNJuR4EBwIDhku0dcNwGCA8Ghu2gElBMgOBAcyovMDVIECA4Eh1ThCColQHAgOJQWmOQpAgSH9dgIDutZmbmdAMFhO8OeDASHHlrHnUtwGHvvCQ5j70/l6ggOlXT3z01w2J9pNiPBgeBAcMh2j7huAgQHgkN30QgoJ0BwIDiUF5kbpAgQHAgOqcIRVEqA4EBwKC0wyVMECA7rsREc1rMyczsBgsN2hj0ZCA49tI47l+Aw9t4THMben8rVERwq6e6fm+CwP9NsRoIDwYHgkO0ecd0ECA4Eh+6iEVBOgOBAcCgvMjdIESA49AsO169/+cfXGIsviuJYPt/Grl69ejp+/nGMx1ic44gvjZ/07+HDh9Pbb1+Z3n//yXOeFGv8chEgOHy5x27cuPGot9r1RecYW47H9XMnn8WjL9tz58fi+TYW55gbY+fHl3Pa89G/77xz9eS4XDVmtf0ECA7rmUVftB5Zvia26+ili45lz8X1888//yhPXC+PmzdvTu24ffv2dOvWrenOnTunxwsvvHCS/5WT76DurV+0mZeWAMHh6W4dweHp8r6sdyM4jL1z8Tp99+7d6eWXX57u3bs3vfHGN6Y333xr7EVb3S4ECA67YHxqSQgOTw31//dG/w8AAP//irNScgAALTZJREFU7d1Nq2ZXdtjxR9VVpXqR0iWIusEeNMkkMVjQk4AHPQr4hR47ZGACnmXW0BPnIxiCMfkCnlgZZZBAPIiDDW7TDrRp2hPHMcE4HXAbRLBAUpe6VO+pda923aOnb0l7r3PW7X3v+RUcnZdnr3X2899r6Xn7S/XaX//18+eHK/jn13/9ncOdO7cPX/7ylw9vvvnm4Y033jjcvn375Xbr1q1DbDdv3jzZXn/99ZP9jRs3Xu7j+Pr164e2j+O2felLXzo5bvtr164d4ni5Pz5+7bXXTsbEPrZ4fLmPZYjzNX+ef7qcsY/t2bNnJ9vxebv+9OnTl2PiWpy3a0+ePHl5Hsft/PHjxyfXYx9bXH/06NHJcZw/fPjw5DyuxfEnn3xysn/w4MGhbffv3z/E9uGHHx4++OCDw7vvfu/FOt1b89TFXgICv/zL//Twox/98OVMo5+iN6MXowfbPo7bFj163J+tb6M3X7W13l32b/RoO2+9G+Pacezbcevfdi3OY2zs2xaPtePlvvV1XGvHsW/HASCOs39aP7d96+e2bz0c561vWw/HvvVu9Gjr0+jNn/zkJ4ePP/748OMf//ikL3/lV/7t4d69r2anKe6SEPiN3/jG4S/+4n+kZxt9Eb277MVl/7Wee9XjbWzbt/HtPPbHx+3act96t11bnrfj2LctxrXj4330brvWejvOl8etn9u11uPt+miPL1+zW++2fo3X0diiP69f/ycv5vaP0usl8PIQ+Pa3//XhD//wP/1MJxx1HL0Sr7utN6MXWp+9at/GHj9+3vXzrkVcXG+PLe/Zrh3nXo4577Hjx+M8tujhGH98Htfb43H8eT0dPfvee68dPvoo/9r+M11oN+8m8Nu//e3D7//+f+gef1kGRn1Hb0WvL/snemB5ft7xsifb8Xn7uLa8Hsftfu2x42vt3z1tH/eP43be9i2u7eN6zP3996+92C7LKphnlsDv/d6/P/zO7/y7bPiu4qIvWg+9qp+X/diOW6+12Pb5PM7b5/a2j88Fbbtz587Jd3B37949xBaf/W/c+MqL76De3hX3vT7ZP/iD/3j4rd/6N3t9+hf+vNtreXz33Xp12aPRl+178ejN6MfY7t27d7J97Wu/eHjnnV+78Hm74cUS+PM//5PDb/7mv7zYm7pbN4F4nY6efOuttw5vv/324etf/6XDt771u93xBl5eAj/84f8+fPOb//zyPoGdzfyrX/35w3e+86OdPes5n+5rBAeCQ/tRNPYEhzkb9arMiuBwKjbFen7eDyVftN5NbGj7ZQ+3Pm7XCA5fRNPjBIcz6SE+TMbWfthsx+089u04eridxz7O29bOR6qL4DBCax9jCQ5nP4ZGL7YfYuLHlna83C/HLK/HcTx2/Hi7Fv26HNPOYx9jYh/b571ux2suwWEffUlwOBP+W58te7Idn7ePa8vrcRw/vESe9tjxtXi8XYt9jG0/2iyvL4/b49G/BId99CXBoX+doy9aj7QeXu6jl87blr0YxwSHfuZ7HklwuNjVj/eq0b8Eh4vlftnuRnCYe8XidZrgMPcaVc2O4FBFtiYvwaGGayYrweHFh7PlB7TllyNx3L5wWX7oi+N4wVnul1+CxmPty9DlcbzZjPPjH0CWX5p+3penPQscP5DEn+MfPo/P24+fy//Su/0w2q61H0bjPI7befzX33Gt/Vfgcd3/waFndYwhOBAcdMF8BAgOBIf5qtKMggDB4ezH0Pa++1Xvy5fvyeP4eIv4ZY42Pq7F+/Dzzpfv7Zfv1c+rToLDeVSu5jWCw0/3V/vMHH3Ujs/bx7Xl9TiOz+Etrj2+vBbHbVyLjWvH15dj2uPR3wSHq9mHx8+K4HBM5NXn0RetR6L3jrfWh8f7Zc/FMcHh1Yw9ckaA4HDG4iKOCA4XQfny34PgMPcaxus0wWHuNaqaHcGhimxNXoJDDddMVoLDp1+QtA9oyy9H4rh94XL8wS9ecOJa2y+/BI1rcb681r4YjccIDg9O/noKf0VFpmUvdwzBgeBwuSv4as6e4EBwuJqVffmfFcHh7MfQ9n77Ve/Ll+/Jj9+zt8eWOZbX4j36eefnvY9/VVURHF5F5updJzic/4No67vjz8/L8zg+Po8fSiO2PRb75bXlj6otNq4dX29xbR+PR88THK5eD573jAgO51E5/1r0Reuh1rfLffTQeduy5+K4fX/WjuO8be2vp4i9v6Li/HXYy1WCw8WuNMHhYnlf1rsRHOZeuXidJjjMvUZVsyM4VJGtyUtwqOGayUpw+PQLkvYBrX0p0j7UtS9clh/64rh9Sdr2yy9B41qcL6/FcbzZjMcIDgSHTLNehRiCA8HhKtTxVXsOBAeCw1Wr6avyfAgOZz+Gtvfbr3pfvnxvfvyevT22zLG8Fu/Rzzs/7338q2qL4PAqMlfvOsGB4HD1qvryPyOCQ/8axmshwaGfl5HrCBAc1vEbjSY4jBLb53iCw9zrHq/TBIe516hqdgSHKrI1eQkONVwzWQkOBIdDfCnbtvirJ/wVFZlWEtNDgOBAcOipE2MulgDBgeBwsRXnbr0ECA4Eh95aMe7iCBAcCA4XV23u1EuA4NBL6nDyH9wQHPp5GbmOAMFhHb/RaILDKLF9jic4zL3uBIe516dydgSHSrrb5yY4bM80m5HgQHB4KTeE5EBwyLaSuB4CBAeCQ0+dGHOxBAgOBIeLrTh36yVAcCA49NaKcRdHgOBAcLi4anOnXgIEh15SBId+UkZuQYDgsAXF/hwEh35Wex5JcJh79QkOc69P5ewIDpV0t89NcNieaTYjwYHgQHDIdo+4YQIEB4LDcNEIKCdAcCA4lBeZG6QIEBwIDqnCEVRKgOBAcCgtMMlTBAgO/dj8FRX9rIxcT4DgsJ7hSAaCwwit/Y4lOMy99gSHudencnYEh0q62+cmOGzPNJuR4EBwIDhku0fcMAGCA8FhuGgElBMgOBAcyovMDVIECA4Eh1ThCColQHAgOJQWmOQpAgSHfmwEh35WRq4nQHBYz3AkA8FhhNZ+xxIc5l57gsPc61M5O4JDJd3tcxMctmeazUhwIDgQHLLdI26YAMGB4DBcNALKCRAcCA7lReYGKQIEB4JDqnAElRIgOBAcSgtM8hQBgkM/NoJDPysj1xMgOKxnOJKB4DBCa79jCQ5zrz3BYe71qZwdwaGS7va5CQ7bM81mJDgQHAgO2e4RN0yA4EBwGC4aAeUECA4Eh/Iic4MUAYIDwSFVOIJKCRAcCA6lBSZ5igDBoR8bwaGflZHrCRAc1jMcyUBwGKG137EEh7nXnuAw9/pUzo7gUEl3+9wEh+2ZZjMSHAgOBIds94gbJkBwIDgMF42AcgIEB4JDeZG5QYoAwYHgkCocQaUECA4Eh9ICkzxFgODQj43g0M/KyPUECA7rGY5kIDiM0NrvWILD3GtPcJh7fSpnR3CopLt9boLD9kyzGQkOBAeCQ7Z7xA0TIDgQHIaLRkA5AYIDwaG8yNwgRYDgQHBIFY6gUgIEB4JDaYFJniJAcOjHRnDoZ2XkegIEh/UMRzIQHEZo7XcswWHutSc4zL0+lbMjOFTS3T43wWF7ptmMBAeCA8Eh2z3ihgkQHAgOw0UjoJwAwYHgUF5kbpAiQHAgOKQKR1ApAYIDwaG0wCRPESA49GMjOPSzMnI9AYLDeoYjGQgOI7T2O5bgMPfaExzmXp/K2REcKulun5vgsD3TbEaCA8GB4JDtHnHDBAgOBIfhohFQToDgQHAoLzI3SBEgOBAcUoUjqJQAwYHgUFpgkqcIEBz6sREc+lkZuZ4AwWE9w5EMBIcRWvsdS3CYe+0JDnOvT+XsCA6VdLfPTXDYnmk2I8GB4EBwyHaPuGECBAeCw3DRCCgnQHAgOJQXmRukCBAcCA6pwhFUSoDgQHAoLTDJUwQIDv3YCA79rIxcT4DgsJ7hSAaCwwit/Y4lOMy99gSHudencnYEh0q62+cmOGzPNJuR4EBwIDhku0fcMAGCA8FhuGgElBMgOBAcyovMDVIECA4Eh1ThCColQHAgOJQWmOQpAgSHfmwEh35WRq4nQHBYz3AkA8FhhNZ+xxIc5l57gsPc61M5O4JDJd3tcxMctmeazUhwIDgQHLLdI26YAMGB4DBcNALKCRAcCA7lReYGKQIEB4JDqnAElRIgOBAcSgtM8hQBgkM/NoJDPysj1xMgOKxnOJKB4DBCa79jCQ5zrz3BYe71qZwdwaGS7va5CQ7bM81mJDgQHAgO2e4RN0yA4EBwGC4aAeUECA4Eh/Iic4MUAYIDwSFVOIJKCRAcCA6lBSZ5igDBoR8bwaGflZHrCRAc1jMcyUBwGKG137EEh7nXnuAw9/pUzo7gUEl3+9wEh+2ZZjMSHAgOBIds94gbJkBwIDgMF42AcgIEB4JDeZG5QYoAwYHgkCocQaUECA4Eh9ICkzxFgODQj43g0M/KyPUECA7rGY5kIDiM0NrvWILD3GtPcJh7fSpnR3CopLt9boLD9kyzGQkOBAeCQ7Z7xA0TIDgQHIaLRkA5AYIDwaG8yNwgRYDgQHBIFY6gUgIEB4JDaYFJniJAcOjHRnDoZ2XkegIEh/UMRzIQHEZo7XcswWHutSc4zL0+lbMjOFTS3T43wWF7ptmMBAeCA8Eh2z3ihgkQHAgOw0UjoJwAwYHgUF5kbpAiQHAgOKQKR1ApAYIDwaG0wCRPESA49GMjOPSzMnI9AYLDeoYjGQgOI7T2O5bgMPfaExzmXp/K2REcKulun5vgsD3TbEaCA8GB4JDtHnHDBAgOBIfhohFQToDgQHAoLzI3SBEgOBAcUoUjqJQAwYHgUFpgkqcIEBz6sREc+lkZuZ4AwWE9w5EMBIcRWvsdS3CYe+0JDnOvT+XsCA6VdLfPTXDYnmk2I8GB4JASHJ48eXKI7fHjxyf7R48enRzH+cOHDw9xHlscf/LJJyf7Bw8eHNp2//79Q2wffvjh4YMPPji8++73Dm++eS9bx+IuCQGCA8HhkpTqrqZJcCA47KrgL9GTJTgQHC5Rue5mqgQHgsNuiv0SPVGCQ/9iERz6WRm5ngDBYT3DkQwEhxFa+x1LcJh77QkOc69P5ewIDpV0t89NcNieaTYjwYHgkBYcmtwQogPBIduC+4ojOBAc9lXxl+PZEhwIDpejUvc3S4IDwWF/VT//MyY4EBzmr9L9zZDg0L/mBId+VkauJ0BwWM9wJAPBYYTWfscSHOZee4LD3OtTOTuCQyXd7XMTHLZnms1IcCA4pAUH/weHbNvtN47gQHDYb/XP+8wJDgSHeatz3zMjOBAc9t0Bcz57ggPBYc7K3PesCA79609w6Gdl5HoCBIf1DEcyEBxGaO13LMFh7rUnOMy9PpWzIzhU0t0+N8Fhe6bZjAQHgkNKcHj69OnLv5LC/8Eh2377iyM4EBz2V/XzP2OCA8Fh/ird5wwJDgSHfVb+3M+a4EBwmLtC9zk7gkP/uhMc+lkZuZ4AwWE9w5EMBIcRWvsdS3CYe+0JDnOvT+XsCA6VdLfPTXDYnmk2I8GB4EBwyHaPuGECBAeCw3DRCCgnQHAgOJQXmRukCBAcCA6pwhFUSoDgQHAoLTDJUwQIDv3YCA79rIxcT4DgsJ7hSAaCwwit/Y4lOMy99gSHudencnYEh0q62+cmOGzPNJuR4EBwIDhku0fcMAGCA8FhuGgElBMgOBAcyovMDVIECA4Eh1ThCColQHAgOJQWmOQpAgSHfmwEh35WRq4nQHBYz3AkA8FhhNZ+xxIc5l57gsPc61M5O4JDJd3tcxMctmeazUhwIDgQHLLdI26YAMGB4DBcNALKCRAcCA7lReYGKQIEB4JDqnAElRIgOBAcSgtM8hQBgkM/NoJDPysj1xMgOKxnOJKB4DBCa79jCQ5zrz3BYe71qZwdwaGS7va5CQ7bM81mJDgQHAgO2e4RN0yA4EBwGC4aAeUECA4Eh/Iic4MUAYIDwSFVOIJKCRAcCA6lBSZ5igDBoR/bRQsOt2/fPty5c+dw9+7dk+2NN9443LjxlRffQb3dP2kjLy0BgsPFLh3B4WJ5X9a7ERzmXjmCw9zrUzk7gkMl3e1zExy2Z5rNSHAgOBAcst0jbpgAwYHgMFw0AsoJEBwIDuVF5gYpAgQHgkOqcASVEiA4EBxKC0zyFAGCQz82gkM/KyPXEyA4rGc4koHgMEJrv2MJDnOvPcFh7vWpnB3BoZLu9rkJDtszzWYkOBAcCA7Z7hE3TIDgQHAYLhoB5QQIDgSH8iJzgxQBggPBIVU4gkoJEBwIDqUFJnmKAMGhHxvBoZ+VkesJEBzWMxzJQHAYobXfsQSHudee4DD3+lTOjuBQSXf73ASH7ZlmMxIcCA4Eh2z3iBsmQHAgOAwXjYByAgQHgkN5kblBigDBgeCQKhxBpQQIDgSH0gKTPEWA4NCP7aIFh/jrKeKvqfBXVPSv0VUaSXC42NUkOFws78t6N4LD3CtHcJh7fSpnR3CopLt9boLD9kyzGQkOBAeCQ7Z7xA0TIDgQHIaLRkA5AYIDwaG8yNwgRYDgQHBIFY6gUgIEB4JDaYFJniJAcOjHRnDoZ2XkegIEh/UMRzIQHEZo7XcswWHutSc4zL0+lbMjOFTS3T43wWF7ptmMBAeCA8Eh2z3ihgkQHAgOw0UjoJwAwYHgUF5kbpAiQHAgOKQKR1ApAYIDwaG0wCRPESA49GMjOPSzMnI9AYLDeoYjGQgOI7T2O5bgMPfaExzmXp/K2REcKulun5vgsD3TbEaCA8GB4JDtHnHDBAgOBIfhohFQToDgQHAoLzI3SBEgOBAcUoUjqJQAwYHgUFpgkqcIEBz6sREc+lkZuZ4AwWE9w5EMBIcRWvsdS3CYe+0JDnOvT+XsCA6VdLfPTXDYnmk2I8GB4EBwyHaPuGECBAeCw3DRCCgnQHAgOJQXmRukCBAcCA6pwhFUSoDgQHAoLTDJUwQIDv3YCA79rIxcT4DgsJ7hSAaCwwit/Y4lOMy99gSHudencnYEh0q62+cmOGzPNJuR4EBwIDhku0fcMAGCA8FhuGgElBMgOBAcyovMDVIECA4Eh1ThCColQHAgOJQWmOQpAgSHfmwEh35WRq4nQHBYz3AkA8FhhNZ+xxIc5l57gsPc61M5O4JDJd3tcxMctmeazUhwIDgQHLLdI26YAMGB4DBcNALKCRAcCA7lReYGKQIEB4JDqnAElRIgOBAcSgtM8hQBgkM/NoJDPysj1xMgOKxnOJKB4DBCa79jCQ5zrz3BYe71qZwdwaGS7va5CQ7bM81mJDgQHAgO2e4RN0yA4EBwGC4aAeUECA4Eh/Iic4MUAYIDwSFVOIJKCRAcCA6lBSZ5igDBoR8bwaGflZHrCRAc1jMcyUBwGKG137EEh7nXnuAw9/pUzo7gUEl3+9wEh+2ZZjMSHAgOBIds94gbJkBwIDgMF42AcgIEB4JDeZG5QYoAwYHgkCocQaUECA4Eh9ICkzxFgODQj43g0M/KyPUECA7rGY5kIDiM0NrvWILD3GtPcJh7fSpnR3CopLt9boLD9kyzGQkOBAeCQ7Z7xA0TIDgQHIaLRkA5AYIDwaG8yNwgRYDgQHBIFY6gUgIEB4JDaYFJniJAcOjHRnDoZ2XkegIEh/UMRzIQHEZo7XcswWHutSc4zL0+lbMjOFTS3T43wWF7ptmMBAeCA8Eh2z3ihgkQHAgOw0UjoJwAwYHgUF5kbpAiQHAgOKQKR1ApAYIDwaG0wCRPESA49GMjOPSzMnI9AYLDeoYjGQgOI7T2O5bgMPfaExzmXp/K2REcKulun5vgsD3TbEaCA8GB4JDtHnHDBAgOBIfhohFQToDgQHAoLzI3SBEgOBAcUoUjqJQAwYHgUFpgkqcIEBz6sREc+lkZuZ4AwWE9w5EMBIcRWvsdS3CYe+0JDnOvT+XsCA6VdLfPTXDYnmk2I8GB4EBwyHaPuGECBAeCw3DRCCgnQHAgOJQXmRukCBAcCA6pwhFUSoDgQHAoLTDJUwQIDv3YCA79rIxcT4DgsJ7hSAaCwwit/Y4lOMy99gSHudencnYEh0q62+cmOGzPNJuR4EBwIDhku0fcMAGCA8FhuGgElBMgOBAcyovMDVIECA4Eh1ThCColQHAgOJQWmOQpAgSHfmwEh35WRq4nQHBYz3AkA8FhhNZ+xxIc5l57gsPc61M5O4JDJd3tcxMctmeazUhwIDgQHLLdI26YAMGB4DBcNALKCRAcCA7lReYGKQIEB4JDqnAElRIgOBAcSgtM8hQBgkM/NoJDPysj1xMgOKxnOJKB4DBCa79jCQ5zrz3BYe71qZwdwaGS7va5CQ7bM81mJDgQHAgO2e4RN0yA4EBwGC4aAeUECA4Eh/Iic4MUAYIDwSFVOIJKCRAcCA6lBSZ5igDBoR8bwaGflZHrCRAc1jMcyUBwGKG137EEh7nXnuAw9/pUzo7gUEl3+9wEh+2ZZjMSHAgOBIds94gbJkBwIDgMF42AcgIEB4JDeZG5QYoAwYHgkCocQaUECA4Eh9ICkzxFgODQj43g0M/KyPUECA7rGY5kIDiM0NrvWILD3GtPcJh7fSpnR3CopLt9boLD9kyzGQkOHYLD9evXDzdu3DjEvm3xghPHbX/t2rWT4+X++DjebMb42McWjy/3sYhxvubP8+fPT8JjH9uzZ89OtuPzdv3p06cvx8S1OG/Xnjx58vI8jtv548ePT67HPra4/ujRo5PjOH/48OHJeVyL408++eRk/+DBg0Pb7t+/f4jtww8/PHzwwQeHd9/93uHNN++teepiLwEBggPB4RKU6e6mSHAgOOyu6C/JEyY4EBwuSanuapoEh7PPw+1z8fJzcjs+bx/Xltfj+OaLz+KRpz12fC0eb9diH2Pj2vH15Zj2eHzufv/9ay+2XZXoLp8swaF/2aMvWo+0Hl7uo5fO25Y9F8evv/76yzxxvNxu3bp1aNudO3cOt2/fPty9e/dke+ONN17k/8qL76De7p+0kZeWAMHhYpcuvk+O/o2ea33e+jV6NPoyHostejP6MbZ79+6dbF/72i8e3nnn1y520u524QQIDheOfOiG8TodPfnWW28d3n777cPXv/5Lh29963eHchh8OQkQHC7XuhEc5lkvgsOnX5C0D2jLL0fiuH3YWx7HtXjBWe6XMkM8FufLa01miMfiTedSbGiPRVkQHOZpDjPZngDBgeCwfVXJuJYAwYHgsLaGxNcQIDic/Rja3nfHe+/j9+TtvfpyTLvW9vHY8ePtWrwPj3HH5+e9j3/VSock/N57rx0++midqPyq/K7PQ4DgQHCYpxrNpBEgODQSX7yP17r2w2d7jVzu4zX2vC1i4nqLbd+fLX88bZJDkxtiT3D44jW5yiMIDhe7ugSHi+V9We9GcJh75eJ1muAw9xpVzY7gUEW2Ji/BoYZrJivBoUNwOO+L1HjBaV+Gxn75JWg8FufLa3EcbzbjsdjH1q61fSxgXF/zx//BYQ09sdUECA4Eh+oak3+cAMGB4DBeNSIuggDBgeBwEXXmHmMECA4Eh7GKMfoiCBAc+inH91FNUliKDe34PLmhiQ1t36SGlqeJDW1PcOhfj6s+kuBwsSsc3ydHn/o/OFws98t2N4LD3CsWr9MEh7nXqGp2BIcqsjV5CQ41XDNZCQ4EB39FRaZzxKQIEBwIDqnCEVRKgOBAcCgtMMnTBAgOBId08QgsI0BwIDiUFZfEaQIEh350BId+VkauJ0BwWM9wJAPBYYTWfscSHOZee4LD3OtTOTuCQyXd7XMTHLZnms1IcCA4EByy3SNumADBgeAwXDQCygkQHAgO5UXmBikCBAeCQ6pwBJUSIDgQHEoLTPIUAYJDPzaCQz8rI9cTIDisZziSgeAwQmu/YwkOc689wWHu9amcHcGhku72uQkO2zPNZiQ4EBwIDtnuETdMgOBAcBguGgHlBAgOBIfyInODFAGCA8EhVTiCSgkQHAgOpQUmeYoAwaEfG8Ghn5WR6wkQHNYzHMlAcBihtd+xBIe5157gMPf6VM6O4FBJd/vcBIftmWYzEhwIDgSHbPeIGyZAcCA4DBeNgHICBAeCQ3mRuUGKAMGB4JAqHEGlBAgOBIfSApM8RYDg0I+N4NDPysj1BAgO6xmOZCA4jNDa71iCw9xrT3CYe30qZ0dwqKS7fW6Cw/ZMsxkJDgQHgkO2e8QNEyA4EByGi0ZAOQGCA8GhvMjcIEWA4EBwSBWOoFICBAeCQ2mBSZ4iQHDox0Zw6Gdl5HoCBIf1DEcyEBxGaO13LMFh7rUnOMy9PpWzIzhU0t0+N8Fhe6bZjAQHggPBIds94oYJEBwIDsNFI6CcAMGB4FBeZG6QIkBwIDikCkdQKQGCA8GhtMAkTxEgOPRjIzj0szJyPQGCw3qGIxkIDiO09juW4DD32hMc5l6fytkRHCrpbp+b4LA902xGggPBgeCQ7R5xwwQIDgSH4aIRUE6A4EBwKC8yN0gRIDgQHFKFI6iUAMGB4FBaYJKnCBAc+rERHPpZGbmeAMFhPcORDASHEVr7HUtwmHvtCQ5zr0/l7AgOlXS3z01w2J5pNiPBgeBAcMh2j7hhAgQHgsNw0QgoJ0BwIDiUF5kbpAgQHAgOqcIRVEqA4EBwKC0wyVMECA792AgO/ayMXE+A4LCe4UgGgsMIrf2OJTjMvfYEh7nXp3J2BIdKutvnJjhszzSbkeBAcCA4ZLtH3DABggPBYbhoBJQTIDgQHMqLzA1SBAgOBIdU4QgqJUBwIDiUFpjkKQIEh35sBId+VkauJ0BwWM9wJAPBYYTWfscSHOZee4LD3OtTOTuCQyXd7XMTHLZnms1IcCA4EByy3SNumADBgeAwXDQCygkQHAgO5UXmBikCBAeCQ6pwBJUSIDgQHEoLTPIUAYJDPzaCQz8rI9cTIDisZziSgeAwQmu/YwkOc689wWHu9amcHcGhku72uQkO2zPNZiQ4EBwIDtnuETdMgOBAcBguGgHlBAgOBIfyInODFAGCA8EhVTiCSgkQHAgOpQUmeYoAwaEfG8Ghn5WR6wkQHNYzHMlAcBihtd+xBIe5157gMPf6VM6O4FBJd/vcBIftmWYzEhwIDgSHbPeIGyZAcCA4DBeNgHICBAeCQ3mRuUGKAMGB4JAqHEGlBAgOBIfSApM8RYDg0I+N4NDPysj1BAgO6xmOZCA4jNDa71iCw9xrT3CYe30qZ0dwqKS7fW6Cw/ZMsxkJDgQHgkO2e8QNEyA4EByGi0ZAOQGCA8GhvMjcIEWA4EBwSBWOoFICBAeCQ2mBSZ4iQHDox0Zw6Gdl5HoCBIf1DEcyEBxGaO13LMFh7rUnOMy9PpWzIzhU0t0+N8Fhe6bZjAQHggPBIds94oYJEBwIDsNFI6CcAMGB4FBeZG6QIkBwIDikCkdQKQGCA8GhtMAkTxEgOPRjIzj0szJyPQGCw3qGIxkIDiO09juW4DD32hMc5l6fytkRHCrpbp+b4LA902xGggPBgeCQ7R5xwwQIDgSH4aIRUE6A4EBwKC8yN0gRIDgQHFKFI6iUAMGB4FBaYJKnCBAc+rERHPpZGbmeAMFhPcORDASHEVr7HUtwmHvtCQ5zr0/l7AgOlXS3z01w2J5pNiPBgeBAcMh2j7hhAgQHgsNw0QgoJ0BwIDiUF5kbpAgQHAgOqcIRVEqA4EBwKC0wyVMECA792AgO/ayMXE+A4LCe4UgGgsMIrf2OJTjMvfYEh7nXp3J2BIdKutvnJjhszzSbkeBAcCA4ZLtH3DABggPBYbhoBJQTIDgQHMqLzA1SBAgOBIdU4QgqJUBwIDiUFpjkKQIEh35sBId+VkauJ0BwWM9wJAPBYYTWfscSHOZee4LD3OtTOTuCQyXd7XMTHLZnms1IcCA4EByy3SNumADBgeAwXDQCygkQHAgO5UXmBikCBAeCQ6pwBJUSIDgQHEoLTPIUAYJDPzaCQz8rI9cTIDisZziSgeAwQmu/YwkOc689wWHu9amcHcGhku72uQkO2zPNZiQ4EBwIDtnuETdMgOBAcBguGgHlBAgOBIfyInODFAGCA8EhVTiCSgkQHAgOpQUmeYoAwaEfG8Ghn5WR6wkQHNYzHMlAcBihtd+xBIe5157gMPf6VM6O4FBJd/vcBIftmWYzEhwIDgSHbPeIGyZAcCA4DBeNgHICBAeCQ3mRuUGKAMGB4JAqHEGlBAgOBIfSApM8RYDg0I+N4NDPysj1BAgO6xmOZCA4jNDa71iCw9xrT3CYe30qZ0dwqKS7fW6Cw/ZMsxmvrODwne/818P161863Lhx88UWX5BeP8SLxPXrp/s4ju3atWsn2/K4XYt9vEFs53H82msxPvan10+vnZ6fd3w4xGMv/nkS++Lg0/NYsLNrJ2fxj5OxJwfJfzx/3gJPD56/uHB6bbk/PY7HDoc4/uLt2bNnJ+PO9hHz7DNyRDy23J4+fXpyHvvl9uTJk0Nsjx8/PtkePXp0+MY3vnmyVm329leTwB/90X8+fPzxj18+ueitn+7J6M1ri/48PW99eLo/u9Z68rOP/3TvxuPRc8f75bXWkzEmerX1eru+3Lde/uy1ZV+f9n482RjTxsf+9NrJLvWP1tMRfNrHp/vW78e9fda3Z3183KvRo8vejL78uZ/7Z4ebN2+l5ijo8hD47nf/2+H99/9fesKnvXfak1Hrp+enr63n9edyzPLxvuvn9XB7XW77szEtZ+xPt7Mx7fx0THv88/cBqeVqPR3n7bjtT6+NIz1+PT7t0+cvXkujP+O19MmL+7/xYrsxnlzEpSPw/e//6eHv//7//kzn3er92rV4z3x+bx2/rp6et1777P68seddi/vG9fZY+3fFF+/P5vjTsdHfbT5nvX427uxae97L/ectRPTugwevvXhf+3mjPHYVCPzlX37/8Ld/+7+uwlP5zHNotR6fiVv/tWutRz5/f9pbp2OWx2e9fPxYnLet3bOdv2ofPRyfE44fP+965Hz4MLbPPFUnV5DA3/zN/zz81V/94Ao+s+2f0mmvffZ9e+u/9hp5Xn/FtePeO/sO7TRfO4/96RZC1OlxfOa/fv30e7lr1269+AzrM+b2qztfxr/7u/9z+MEPvjvfxK7ojFovt1487eWz/jzuzejL+L785qf/4d/du/cOb73181eUjqfVCPzDP7x3+LM/++/t1H4yAvFafPPmjcPrr79+uHXr1oue/MeHX/iFfzHZLE2ngsD9+x8d/viP/0tFajkLCNy+fefwq7/6rwoySzlK4MoKDqMgjEcAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBeQkQHOZdGzNDAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgU8JEByUAgIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEBzUAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAghMT4DgMP0SmSACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII/H/pxgHAZkpI9AAAAABJRU5ErkJggg==", - "w": 1052, - "h": 112, - "mimeType": "image/png", - "isAnimated": false - }, - "meta": {}, - "id": "asset:814849268", - "typeName": "asset" - }, - { - "id": "asset:8475689", - "type": "image", - "typeName": "asset", "props": { "name": "coordinate-system.png", "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAHGCAYAAAACITPOAAABYWlDQ1BJQ0MgUHJvZmlsZQAAKJFtkL1Lw2AQxp9qpOBH6aCDIhJwEqpIU6W4SNuhCAohNvixJWmaCm19SSMiiJP4F4g4dBQnQXCpbl2cXASlgrMgugpZtMR7U7WtenDcj4d7juMBusIaYwUBQLHk2Eo6Ka6urYvBZwgYQggiQppRZglZXqQVfM/OcusI8Hk3yW+d5+YPb3O7rxc31+GXSqX+d7+jerNm2aD5QT1rMNsBAjFiedthnPeJB216iviYs9XkM856k2v+TkZJEd8Th428liV+Io7obbrVxsXClvH1A/++3yypyzRHqEeRxgYsaNCxAwcm5bAECVGolNP/vpjvS2ETjDy278+TV0SCFIaCf2UBJRiYQoQ4imlqief9O8eWtjcGzMUJTlqaagKXSWB4pqWNK8DAAXCVYZqt/aQbcIVyToo2ua8K9Bx53tsKEJwAGg+e9171vMYp0P0I1NxPHp5l2tMpyJ4AAACKZVhJZk1NACoAAAAIAAQBGgAFAAAAAQAAAD4BGwAFAAAAAQAAAEYBKAADAAAAAQACAACHaQAEAAAAAQAAAE4AAAAAAAAAkAAAAAEAAACQAAAAAQADkoYABwAAABIAAAB4oAIABAAAAAEAAAIAoAMABAAAAAEAAAHGAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdE5PS9QAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHWaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjQ1NDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj41MTI8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KLnL5kwAAABxpRE9UAAAAAgAAAAAAAADjAAAAKAAAAOMAAADjAABNEntfMFYAAEAASURBVHgB7J1ZcJzXda03em40JgIE55kEQRKkSImiqMHUaNmWZdmSbcVTfP2Uh1TiqgyVSqUqr6nkJclD8hqn7s29lmXZlkfJkmzTkixL1ERSnCeQBElwwAw00HPjrnV+gCIligRIdKOH9ScUCKD7H77T9Flnn73XrmlqahofGBgwHSIgApVDYDyTsXxizMbzefMFQ2bBoNUEAlbj81XOQ+pJREAEbprAnDlzrEYC4Kb56Y0iULIE8smk5QYHjEKgJhQyXyRqvtpaq4EQ0CECIiACEgD6DIhAhRLIDQ9Z5uwZy4/GIQDC5mtstGDrfPPFYhX6xHosERCB6RCQAJgOLb1WBMqIQLa3x1KHD1q2v99FAAKtrRZetcb8c5rL6Cl0qyIgAoUiIAFQKLI6rwjMMoFM9zlLvLvLMhfOY+8/aMFFiy265Q4LLFg4y3emy4uACJQCAQmAUhgF3YMIzDSB8XFLn+q0+M5X8PUkEv/8Flq52mIPPGyhFStn+mo6nwiIQBkSkAAow0HTLYvAdQlg8h/Hn9ThAzb0/HNuGwAKwCLrO6zxqactvG7Ddd+uX4qACFQHAQmA6hhnPWUVERjP51zmf3LfXht67hlLHtyHp6+xyIaN1vj0Nyy6abNXCYCogA4REIHqJSABUL1jryevUALj6bTlRkeMAmD45z+x1JFD7knDbeus4fEvWQQCwI+KgJpwpEIJ6LFEQASmQkACYCqU9BoRKCMC+bFRy/ZcggDYYyOv/NrSncfd3YdWrLK6Bx5xAoAJgb76hmk9VS6Xsww8BbLZrNti8Pv9Fg6HjV+vd+RhRMT38g//7oMRURBeBDd63/XOqd+JgAjcOgEJgFtnqDOIQEkRoPlP+uQJFwEYffMP8ALocvcXXIgqgK3bLLJxs4Xb11tgbuu07jsJYyE6ho6NjbnJPBqNWktLi9XCXOh6B0UD35NIJCyN6AQnf/4PTySiCMT1uOl3IlBoAhIAhSas84tAkQlkL12w5P4PXAQggW2A7MUL7g78LXON2wDMAYjeud2VBU7n1np7e+3IkSPW3d1t8XjcmpubbfPmzbZo0SILwGKYK/trHT09PXbw4EG7cOGCpVIpa4UfwZYtW2zhQpUjXouXfiYCxSIgAVAs0rqOCBSJAFf8o2+9ARGwF+H/E5Yb6HdX9tXVW3DhImwBbLG6hz6NcsBV07qj48eP24svvmjvvfeedXV12fLly+2b3/ymbd261erq6iwEu+FrHe+//75973vfc+/jFsDtt99uf/Znf2Z33HGH1dTUXOst+pkIiEARCEgAFAGyLiECRSPA+n+E/0d++5LbAsheuuisgHn9Gu7XNzRiC+A2q3/sixZeu85rDDTFSfjEiRP28ssv26uvvmp//OMfXQTgO9/5jj344IO2cuVKQ0+Rqx6Tkz3zBX7/+9/bP/3TP9nbb7/tXvPAAw/YX/3VX9n27dslAK4ipm9EoLgEJACKy1tXE4HCEZis/0fWP7P/E4gAjI+OoiQw7V0TyXp0BGQ5YMOXvmKRjk0oBwxZzQ2S+CZveGhoyK38OaH/93//t/XDYnjHjh1OADz88MNOBEy+ll+538+tAr7+X//1X62zs9NtGVAwPPnkk7Zu3borX66/i4AIFJmABECRgetyIlAoAuPIsmcJYPLAPhv6KQyADu23cazAkXr/4SWx2g+3tVv940965YCICPgQGZjKwdU8EwFfe+01N6EfOHDAli5davfff799+9vfdpP7lSH9wcFBO336tIsYUDAwCfCLX/yiEwzcBlAOwFSo6zUiUDgCEgCFY6szi0BRCYyn0P4Xq3Tu/Q+/8AtLHTtsqNfz/lxxJ6HlK50lcGTjFgsuXoJtgamVA9JdkKV8DP//+7//u7311luuHPCee+6xv/3bv7V7773XhfQnRQAn/9dff91FAH73u9/Z3Llz7S/+4i+cAGAi4I2qB664Zf1VBESgAAQkAAoAVacUgdkgkI+PWOZ8t8v+j+/8jesFcK37CCARMHo7ygFRDRCBLfB0ywH37dtn3//+993EfuzYMVu7dq39zd/8jZvY6+vrnTcAr8vXPfPMM04EnDp1yjZs2GB/93d/57YNWAr4SVUD17pn/UwERGDmCUgAzDxTnVEEZoVArr8Pq/4jxtK/xDtvWab77DXvw9/cYqE1a105YO22e1wU4Jov/IQfspxv7969TgD89Kc/ddn/rAZ4EHv7bW1tLjmQ0YI333zT/u3f/s127drlav/vvvtu++53v3s5+W8yUvAJl9GPRUAECkxAAqDAgHV6ESgWgcyFbkvsfs9tAaQOHXBugNe6tg8le4H5C50hUN3Dj1oYXQIRu7/WS6/5M5r69PX1OQHwn//5n66+/7777nMC4NOf/rQrD2S9/++R/PfP//zPdvToUevo6DBm/z/99NMuEnDNE+uHIiACRSUgAVBU3LqYCBSOQLrrlI3+4VVX/pc5cxr5AIPXvJjL/I/FLApHwIYvftm5ArrV+BRFAPMAJif4f/mXf3H1/dzfZwSAe/wbN268SiCMjIzYl7/8Zff7TZs22fz58695X/qhCIhAcQlIABSXt64mAoUhgJB76vhRG3n5BScAuB2QT4xdfa2JCb7G5zMY8aMtMNoDP/lVrxwQlQA1/sDVr7/Bd6zr/4//+A+30mdEYNu2bfaP//iPbrVPx0BWCzz33HMWg9j4y7/8SycApmIdfIPL6tciIAIzREACYIZA6jQiMGsEMPmPo9QvibD/8E9/hDLAD2w8mfBKACdX9XgNw/w1sOx1B14fWt1m9Z993BkD+ee0mA/e/tM56Az40ksvOQHAigA6AzLJb/Hixe5nrBagSKBJ0D/8wz84ATCV5kHTuQe9VgRE4OYJSADcPDu9UwRKggBr/fOoz6f///DPfuS1/+Uq3yAMEK53PgAQAFzhT07yedTkB9ARMPapB5AMiHLApcvQIvhqJ78bPRx7Axw+fNhN9s8++6wrCeQefwPKCikI6BzI8D9r/uX8dyOa+r0IFJ+ABEDxmeuKIjCjBDiZ5wb6XPZ//KVfWbrrtPlidW7Fnx+NO3MghAjMF4kaKwB4cIvABxOg6ObbvXLAjtss0DpvWvfFPAC6A/4eyX70BWDDHxoDscSPWwLsFsgSQSYIyvlvWmj1YhEoCgEJgKJg1kVEoHAEcsNDljnTBQGwB0mAv7ccVub+efMR8fdZtveS1wsAIX9ffYMFlyxzN8KGQbQADqECgBGA2rvvw++WTusmWerHPwz10+qXPQJGYT1MC2Ae7e3t9sQTT7jQPxv/yPlvWnj1YhEoOAEJgIIj1gVEoLAEsr09bv8/yfr/3e8aHQFDK9eY+Wosc+qk6wY4ns+51X+4fb27mRT6BYxzGwCr/giqAeo/85iFVuE90zwoAOgJ8D//8z8uEnDy5EkbGBhwZ2FS4J//+Z+78j9m/jMZUIcIiEDpEJAAKJ2x0J2IwE0RoOHP2Du7vPp/GAEx0Y8tf5ntz4TA7MULLhcgMH+BRTbfgWvUoFJgt+UQpvdFa10VQMMXnkRVwHqvMRAiB9M5OOnv3LnTCQBm/p85c8YCuAc2Cpp0/lPy33SI6rUiUBwCEgDF4ayriEDBCKRPdVr897/16v/PnzM/2vLW3rMDEQAIgF1/xPbAacsjGTC4aInVbr8HP/fb2HvvWBavZa+AcPs6a3jiy04IMEmQHQOnczAPgL7/zAVg0x/mAtTBbIjGP3/913/tegTQ9lfOf9OhqteKQOEJSAAUnrGuIAIFJZDuPG4jv3nJRQC4HRBYsNDqHvmsm3Djv3vZ+PvxLAQA9vhj9+6wmlDY5QtkuiEA0ikLrVhldZ/5vGsT7IeXP38/nYNd/iadAekLwPJAWgJTAHzrW9+y2267bTqn02tFQASKREACoEigdRkRKAQB7sFznz/+KiIAB/c5+192+GtAu1+u7od/8bylDh90WwBOACAy4EOZXvo0cgP6epEvkHKCoXb7vRaGL4C/sdFqwpFp3erw8LAL+zMC8F//9V9Gq2Am/1EAbN26Vcl/06KpF4tA8QhIABSPta4kAjNOgAKAe/zJD3Z7kzoS8FgBUHffAy77f+jHP/CMgbgFAGEQu3uHm/DpEshkwXFk7LP+n82BggsWoHyQEYDQtO7z7NmzruEPBcCvf/1ra8IWBJP/HnzwQWf7q+S/aeHUi0WgaAQkAIqGWhcSgcIQoAlQfmgAE/6o5TGh18DWNzB3HiIDnTb43DNua2A8l3U5ADGU+4XXrjN/y1yXAEgHwRq25sWePX0CnFMg9uunc+zevdu+973vGQUAEwDp9//3f//3TgBEIhGXEDid8+m1IiACxSEgAVAczrqKCBSFACMCPJhwlzywzwZ/+H0IgD3OFji4cDGSAO91bYBpA+yf0zzte+L5J6+RyWRc3f/rr7/uegK89957zvznU5/6lEv+Y/tfJf5NG7HeIAJFIyABUDTUupAIFJcABcDQc993DoHj2Yw5AbDtblciGF4DATDhCjjVu+LEz06AkwKA9f4sAWTp3zPPPOPaAq9fv97uv/9+tf2dKlS9TgRmkYAEwCzC16VFoJAEmBQ4hC2ABAyCDKt1VgdEIQCimzZbqK3dAtMUAJPZ/pz4BwcH7fz5804A0AjojTfeMNb6P/744y70TxOgRYsWFfLxdG4REIFbJCABcIsA9XYRKFUCkwKADoF5CAAm+UXv3D4hANZZAHkA0zkuXLhg3O/nH076XV1dbguAPgBsDMS9/+9+97tOADQ3N7vtgOmcX68VAREoLgEJgOLy1tVEoGgEkgf329CPvAjAeCZtQTgBRrdus+jGLRaC+U+gpXVa98IVP/f52eL3zTfftHPnzsFryGchVA3U1tbanXfead/5zndsyxa4EE62IZ7WFfRiERCBYhKQACgmbV1LBIpIwBMAP7AEkwBRHRBEeWD0DggAbAGE2zeYf+70BEA8Hnf7/J2dnbZ//37r7+93YX+u9pcsWWLLli2zFStWGP9HRYcIiEDpE5AAKP0x0h2KwE0RcAIAPgAuBwCOfwEKgC1bXfvf8PoOVyo4nRNns1lLouSQEz9r/2n4w31//o8IBUAjTYS08p8OUr1WBGaVgATArOLXxUWgcAQ8AfCsKwPMw/EviM5/HwqAja4T4HSuPlkFwHa/TAikIPCjpXAQPgLcAuBXHSIgAuVDQAKgfMZKdyoC0yKQPIQcgB9DACAJkJa/DPlHN9/uIgCRjk0QAPOndT69WAREoLIISABU1njqaUTgMoGPC4C5zgOAOQCRjZvdlsDlF+svIiACVUdAAqDqhlwPXC0EUocO2OBPJiMASWf8E3GT/xaXCBhAVYAOERCB6iUgAVC9Y68nr3ACSQiA4Z/80KsCQPIenf/CCP2zDJBbARIAFf4B0OOJwA0ISADcAJB+LQLlSsAJgOchAJgDkEw47//wBggARgE23wFjoIXl+mi6bxEQgRkgIAEwAxB1ChEoRQLJw4gAPP+cJwCQte9HuV54/UaXBFiLckBaA+sQARGoXgISANU79nryCieQOnzQhn46KQDGzN/YBAHQgQRAbAHcvhXNgeTVX+EfAT2eCFyXgATAdfHolyJQvgQ8AfAj+ACgF8DYqCcA4ADIREA6AkoAlO/Y6s5FYCYISADMBEWdQwRKkIATAD/7sfMBoADwNTTCAng9kgAhANATILhocQnetW5JBESgWAQkAIpFWtcRgSITSB3BFgAEgEsCHKUAaLBI2zovAoCugBIARR4QXU4ESoyABECJDYhuRwRmikDqyCEb+vlEBGA0br66Bgu3tbsqgOg2CoAlM3UpnUcERKAMCUgAlOGg6ZZFYCoEKACGf/4T+AAgByA+AgFQb+E1a70qgG33WHCxBMBUOOo1IlCpBCQAKnVk9VxVT8AJgF8873IAchQAsZiFV08IgO0UAEurnpEAiEA1E5AAqObR17NXNIHU0cM2PCkARoadAAitWuMiALHt91lwiQRARX8A9HAicAMCEgA3AKRfi0C5EnAC4Jc/RQRgj+UoAGpjFlq52jUCit1DAbCsXB9N9y0CIjADBCQAZgCiTiECpUjgsgBADkBueMh80VoIgFUTAmCHBZdKAJTiuOmeRKBYBCQAikVa1xGBIhNwAuBXP3NGQLkhCoCohVas9ATAvRQAy4t8R7qcCIhAKRGQACil0dC9iMAMEkgdO2IjEACsAsgNDZovErHQcggAOAHG7r1fAmAGWetUIlCOBCQAynHUdM8iMAUCTgC88HNnBJQbGjBfmAJghScA7ntAAmAKDPUSEahkAhIAlTy6eraqJkABMPziL7wywEEKgLDb949s2mKxTz1goWUrqpqPHl4Eqp2ABEC1fwL0/BVLIHXsqCcAuAUw0G++UMgCSPyLUgDseFACoGJHXg8mAlMjIAEwNU56lQiUHYHU8aM28uIvkQSIMkAIAAuGLITSP5cDsOMhtx1Qdg+lGxYBEZgxAhIAM4ZSJxKB0iKQhgAY/jUFACIA/X1WAwEQgPtflEmA91MArCytG9bdiIAIFJWABEBRcetiIlA8Ai4C8NKvvBwACAALBJz/P9sBxx54xJUEFu9udCUREIFSIyABUGojovsRgRkikD5xzIYnBUBfrycAFi72IgAPUgCsmqEr6TQiIALlSEACoBxHTfcsAlMgkIIAiL/8glcG2Ndj5vNbEAKAOQB1D31aAmAKDPUSEahkAhIAlTy6eraqJsAIwMgrL3oCoJcCwGfBBQshALZAADzqbIGrGpAeXgSqnIAEQJV/APT4lUsg3XncCYDkvr2W7bkEAVBjwfkTAuBhCoDVlfvwejIREIEbEpAAuCEivUAEypOAEwC/ecl1A8z2XMRDUAAs8LYAHvmsBEB5DqvuWgRmjIAEwIyh1IlEoLQIpDtPWPy3ngDIXKIAQB7gvPlOANRTAKxaU1o3rLsRAREoKgEJgKLi1sVEoHgE0icpAF52ZYCZi+dx4XELtEIAoAyw/tHPSQAUbyh0JREoSQISACU5LLopEbh1Ak4A/O6VDwVAPm/+1nlGH4D6Rx+z0GpFAG6dss4gAuVLQAKgfMdOdy4C1yWQPtlp8Z0QAHACzJzvNqMAmNvqBEDdZx6z8Oq2675fvxQBEahsAhIAlT2+eroqJpA+1WmjO39jCScAzpnlcuZvaXU5AA2f+TwiABIAVfzx0KOLgEkA6EMgAhVKwAmAV3/rfAAy3RAA2SwEQIvzAaj/7OOKAFTouFf6Y42PQ8vmxw3/j6DWuNXUoLrFX0ObCx3TJCABME1gerkIlAuB9OmTFocAoA9A5txZCICM+ZuvEABr1pbLo+g+ReAygWxu3FKZPP7wKxJbMfk31PotHKy5/Br9ZWoEJACmxkmvEoGyI+AEwGs7JwTAGbNM2vxzmr0IwOe+YGEJgLIb02q94clVPyf/4bG8XRxM29BozgmA+qjfVi4I2Zy6gPlhdoWAgI4pEpAAmCIovUwEyo1A+vQpG319p5cDcKbLLD0pAFAF8NgTEgDlNqBVer9u8sd/kum8jWDyP3Upbe8fH7Pu/ozbCljWGrIdHTFbtSCMKIDPRQSqFNW0H1sCYNrI9AYRKA8C6S4IgD+8igjAHstAAIynUuZvmuMZAVEAtLWXx4PoLquKACf8PP6TyY7bWCrv/sSTeRtO5Gx4NG+nIQD2dI7ZhYGsW+23LQrbY1vrbcOyqNUhGhAKKAQw1Q+MBMBUSel1IlBmBDJnTtvoGxQAe43RgPFU0hMA9AH4/BclAMpsPKvldpngx8l/IJ61s70ZO9uXsa6etPWPZC2ZMYtDCAyMZi2VHkd7ixpbvTBkj27xBMCcOr9FQsoGnOpnRQJgqqT0OhEoMwJOAPzxtQkBcNLySQiAxibPCOjxL0kAlNl4VurtuhA/Jn0m9HHFH09ipT+Ws54hCoC0naEIwNdBrP6zeB1fP47/RDHRt9QHbA0iANvXxiAEwkoGnOaHRAJgmsD0chEoFwKeAHjdGQGlT0EAJBIQAI3OCriBAmDtunJ5FN1nBRNgYl8CE38vVvhc6XOyP4dVf99w1kYntgAoDBgVwNzvBAAT/RbOCdrtq2ttw5KIrcD+P8WAygGn90GRAJgeL71aBMqGAPf9R9+cEABwBcwnxszfMCEAvvCkBEDZjGRl3ShX8Nzj58EQPkv6BpHRz739/acTduJCys4jwY+RAP6eL52s++d7uMcfi/jcin/HhjpbuzhiTTGF/slmuocEwHSJ6fUiUCYEMmcpAN7wIgBoDJQfGzV/fYMrA2yQACiTUay82+Rknka4n0cItftc/Z8fyNiRs0l7++iYnUYUIIGMf6byMczPgxEARgr4Lk72K+eHbf3SiIsALGkJWhCigCWAOqZHQAJgerz0ahEoGwKZs2dsdBcEAJMAO49bfnRSAGy2hieeUgSgbEayvG+UE3ca4XtO6pzIOeHzD5P1FjYHXSb/pcEMVv9J+/3+ETt1Me0emOH82vCHAoBRA5r+LMKEfwdC/+uXRm0VhAAT/3TcHAEJgJvjpneJQMkTyJw7Y2O73nQCIHXiqCcA6updGaATAO3rS/4ZdIPlTYDJepz0e7Gfz7B+V0/Geri3j/A+9/DvQwifXxnuP3gmaS+8O2THulMu7M8F/eSqnlEDrvLroz5rQ8j//g6E/hdFVPZ3ix8PCYBbBKi3i0CpEqD979g7EwLgOARAfMR8EABsB9zwxS9bWAKgVIeuIu6LK/8k9vcvIZu/83wKBj4p67qE5D4k+zHjf/k8lu812GKs6FnWd/Rcyv5wMO4SAQmAEQDu9XPVj0aWVou/z28KYM+fWf91tmQuowdw/qsIWrPzEBIAs8NdVxWBghPIdJ+1xDu7XDOg1LEjEADD5ovVuQhA4xe/IgFQ8BGo7guMwrznIkL7xzH5v39iDJN/+vJePiduTuAs3+NWwJFzSTfxcyuAmf88Jvf6G2Duk8IWQn2tz1ZCNND5b/HckCv50+R/a58xCYBb46d3i0DJEmAHwMS7u9wWQPLYYcsPD1tNLGbRTZut8UsUABtK9t51Y+VPgALgAib0Qwjtv4GVPa172bCH+/r0729EAx9O8nwdBQC3Btjdzz+x97+kJWSbVkRdeR9zCBgNYMJfS0PAYjgHtwR03BoBCYBb46d3i0DJEnAC4L13XC+A1JFDEABD5qvFimtSAKyTACjZwauAG+MWAPf/GQF4Fcl9vdgKmNcUtAXY81+M5D/+bu+phCv/o+sfvf55sLPfEqzwuce/ZVXUvcclACIpIIqJP8yMf4gEJf3f+odEAuDWGeoMIlCSBDLnuy3x/jteEuCRg5YbGvQEAHIAGp/8qoUlAEpy3Crlpli/zyRAlvjt7ky47n3NyNifDwGwFBM8J/2d++IuQkCbX/oBcL+f0YH5EApr4OxHAbAUIX+t+AvzqZAAKAxXnVUEZp1AlgJg97veFsDhA04A1ERrvS2AJ5+WAJj1Ear8G6AIYCLgYDzn9vYZFWDHvlaE8VkWeKw7aYdR/3+wKwlBkHMrfKQHuLJBvuY2bAG0LwkjYTDstgsqn1hxn1ACoLi8dTURKBqB7IXzVwuAgQGriUbdFkDTUxQAHUW7F12oegkwtE+nP07w/Vj1u1p+bAFEIAToB0D7393o7kf730m/gCH0ApgLa98722qtA13+Vi0Iod4/UL0QC/TkEgAFAqvTisBsE3ACYO/7XhXAwX2Wu0IANEIARCQAZnuIquL6F9wWwJidQC4AE/3qI367bWXUViCjn5M6cwEYCTiCMsCjE8mAjBzw9w/fxi5/EWuGGJh0BawKaEV6SAmAIoHWZUSg2ASyFxEB2Lvb2wKgAOjvs5pI1NsCeOpPLLxeEYBij0k1XM/b+4d9L1b+3NvvhLf/u8fH3FdGAejcRye/Dkzsq9HEJ4vcv4NdCTuAbYAD+DqSyLvXrEOTnwc21jnPf0YLGDnQMbMEJABmlqfOJgIlQyB78QIm/z0uApDcv9cJAF8kgm6AW6zxyxIAJTNQFXYjNO1h294zCO2/fWzUlfhdGMi6JEB29GuCAGiHmQ8nePr5MwLw6v64ywUYGMnB3c9n6/E7hv47lkdcQiAdAZkboGNmCUgAzCxPnU0ESoZA9hIFwAeXRUCuv9d8YQgAlgF++WuKAJTMSFXGjWDOtxyS/EYSOesZytlRhPV3HR1FmV8KJX7jbgJnNj+rAJjhz0qABXMCzilw5170AIBRkB/W/8z6v7s95gQCewWwKkBHYQhIABSGq84qArNOIHvpoiUPUADstcQHuy3X22s14bAnAL7yNYus3zjr96gbqBwCXN3T1IeWv+8cG3Oe/j1DbOubd+18afzDLn5ti7xOfjT2YY+A4/D+5+tZFsi9fmb9f2p9na3E9gD3/RX6L9xnRAKgcGx1ZhGYVQLZnksQAPu8CAAEAL/3UQBwC4ACYIMEwKwOUIVdnC1+ufqn899L7w87AcCtADr2cfKn5387Qvtc/VMI0MiH0YFjSA5kGSCrBbjip0DYvLLWGQZVGKKSexwJgJIbEt2QCMwMAScADu33IgB73rMcBICFsKriFsBXvi4BMDOYdZYJAhmE/1nWx4S+F94ddln9zAeY2xhwCX9s4sPM/tbGoLP15ZY+9/8vIkrQeSFtGWQD0gCIDX/4mslWwAJcOAISAIVjqzOLwKwSyPb2WPLQAS8CsPs9RAAuWk0ohG6AiAB8VQJgVgenAi7Omn2G/NOYuDnRM1GPXv/n+tL22oG4s/hlRQAn9c0o+1uNlX8rxMBHJ3aeg02D2PKXFQJ1KBNk1GCyFXAFoCrZR5AAKNmh0Y2JwK0RoABgD4AEKwFgCcycgJogBAAjAF/9hiIAt4a36t/Nkr7Oiynrwz6+y+5HY582+Pf7kMh3Ej8fgvkPw/z1CP8vambNv98JhI9O7HQHZHtg2gZz4ueev49tfpX1X/DPmARAwRHrAiIwOwSyfb1OALgkwPfftsyFC+YLwoGNAuBpCoBNs3NjumpZE6C1Lyf3s70ZV7rH1Xsma7YA+/fb19a6ED7b97Kzn49RAUzqMazqQ/iqo7QISACU1njobkRgxgg4AXDsiJcDgLbAdAY0CAAXAZAAmDHO1XYiTvgfoIsfW/h2oXSPkQCG+pfMDdp9G+pcEh+T/iLI4Ocqnqt5b1VfbaRK/3klAEp/jHSHInBTBLJw/ktDACRYBvjOW4gAdFtNYFIAfNMiHYoA3BTYKnwTJ3g6+w3Q2e8ivPtPjNoJJO4x/M/wPVf3q1C2d39HnTP3aUEjn4/u9VchtpJ/ZAmAkh8i3aAI3BwBJwBOHPMEwNtvWub8OQiAgCsDbPoTCYCbo1p97+LkzwS9s2jW8w6d/dC973x/xjX4Yekf9+1Zv3+ldS+TAT+611995Er/iSUASn+MdIcicFMEcgP9luo87rYAxna9YZluCAA/BAByAJr+5FuKANwU1ep7E9v29g3D2Q8h/z8cijtPf5bvGYQBzXxaMPnTva99ccS2rIqqfr+MPiISAGU0WLpVEZgOgdzggKVPdroqgLE3/wABcNYJAJcDIAEwHZRV/Vp289vTmXD1/cdh2tOLbQBa/jK7fxnsfNc4Z78orH2D1oRKAO796ygPAhIA5TFOuksRmDYBJwBOn3QRgNE/vm6Zc2ckAKZNsfregGi/sTSPB5P3LiHpb/cJCIAzCefuF0/mXFb/Qvj4r0XZH537WOPPbQAd5UVAAqC8xkt3KwJTJpAbGrQMBACTAEffeM0yZykAsELjFsDXuAVw25TPpRdWDwEa/NC/n0cdQvwUA9wCOIy9/9cPjrh2vWzjy6S/lfNDruyvDg17VOZXfp8RCYDyGzPdsQhMiYATAF2nXQQg/sarljlzekIAbPFyADZKAEwJZJW8iGY+3NtnWd8FrPoZCWip9zsf/1jY77r2vX007l6zCit+hv/Z2Y8iQUd5EpAAKM9x012LwA0J5IaHMOl3eQLg9Z2XBYCXA/CnqAaQALghxCp6Ac192JyH5X1Hz6WMZj5s17tqQcg2LosaV/n93P+HMqBdbxStfSPI9le3vvL9kEgAlO/Y6c5F4LoEcsPDbt8/CSvg0dd2WrrrlNX4JrcAJACuC6+Kfsk6/qGxnHXDw5+Z/sfQnrfzYsZ5/LMxz8blUXtwU71r5FNFWKriUSUAqmKY9ZDVSCA3AgGA0j8nAF79raVPn4Itmw/NgJAD8PVvKwJQjR+KazzzpaGsHTidsKPdSTsFkx86/bFBTw0c/BprfdYBAfD5rY0u2/8ab9ePypiABEAZD55uXQSuRyAfH3HmPy4JcOdvIABOGkIALglwjgTA9dBVxe9Y38+Q/klM+h+cTCD0n3KTfxI/DyL7vwElfQuwx79hScTuhcXvUuz566gsAhIAlTWeehoRuEzACYCL570cgN+9YulTnRAANRAAW0wC4DKmqvwLO++dc85+Yy67vxvOfgNxz9Y3gJy+Rkz+zPK/s63W1iyM2FxZ+1bk50QCoCKHVQ8lAmb50bhlLl6YEAAvOVMgTwBsnhAAm4WpSglQANDU56X3h23/6aTr7sfkPib2NSPzfwlW+3T2u2N11BYiCsDtAB2VR0ACoPLGVE8kAo5AfnTUsj0XnQAY+c2vIQBOeBEA5ADM+QZzACQAqvmjchzJfi++P+T2/1kBEAr6bHFLEKY+EWT9R2wZ7H2b6pDtL2e/iv2YSABU7NDqwaqdQH6MAqDHkvv32sgrL1oafQFcBEACoKo+GlzZs8Y/kR5Hcl/ONemZg4m9D/v/u46Muqz/ftT+R0NeR781cPdrh7sfO/rpqGwCEgCVPb56uiomkB8bs2xfrycAXvqVJwDAw+UAKAJQNZ8MJvUNYIXPDn6dSPSjV//W1bVun5/tfFkFQL9/7v0vmxe2eY0B5/MvZ7/K/4hIAFT+GOsJq5RAPpEwtgR2EYBf/9LSaA3MQwKgOj4QGVj4JuDs1zeSszM9aTt1Ke0EAJ377t0QszULIlYfhdUvIgS9EAHc5m9tDLoOf9VBSE8pAaDPgAhUKIF8MmFsCJREL4CRF39hqeNHjalcFABNigBU6Kh/+FjDMPc5i0z/E0j2O9CVcFn/8UTOGtDFbx1K+9YvjdiGpVGX9EczIB5hOft9CLAK/iYBUAWDrEesTgLjqaSxHwB9AEZ+9TNLHTvisrklACr788DJfAQTPUP+zPSns98xmPyw5p/Z/K0I8a+HAOhYjmQ/mPzMbwpWNhA93ScSkAD4RDT6hQiUN4E8BQD6AbgIAAXA0cMTPgCsAvhfqgIo7+H9xLvvxb7+oYnWvc7cZyCL7n45dPUzCwaQ6Dc/bDs6Yi4CwJB/LUr/dFQnAQmA6hx3PXUVEBhPpyw3MgIBsMeGf/H81QLg6xAAaAuso3IIsG0vV/+n0NDn7aOjdvhM0s4juY+2vmzYw9A/u/etRYb/XWtrXZlfGKV/fp9q/CvnUzC9J5EAmB4vvVoEyobAeDrtzIAYARj6+Y8tdeTQhxEACYCyGcep3ignevr4Hz6btLcOjzohwNI/zu9M9lsJZ7+71sasDQKguS7gkv182BKQx89UCVfe6yQAKm9M9UQi4AiMZzI2Di8A5gAM/exHljp88AofAEUAyv1jAjM/y+M//MpjDBn/PcjmpwD4w8G4ne3NYHVvztN/cXPQ2pfQ2jdm/Luc/Txm1f5fCYBq/wTo+SuWwHg2Y/mxhCsDHHr+OQiAA+5ZGfqf843vaAugzEd+0uCHXykCqAP4lc19fr9vBAIg7Vz8FsHd77YVUVuOGn/a/MrZr8wHfgZvXwJgBmHqVCJQSgTGs1nLJ5OeAPjJs5Y6JAFQSuNzs/eSz5uxxp9lfpeGMjbmWvcyzO83TvbxRN52d465aABNfxZixc+Sv1Y5+90s8op9nwRAxQ6tHqzaCYzncsY8ACYBDv34B5Y8uN8hUQSgvD8ZTPTj5H/yYsreOz5mFwazzsVvxUR2P8v6BmHtm4L9L7cAKAIaIA5Y469DBK4kIAFwJQ39XQQqiQCWinnkAbgkwOe+DwGwzz2dBEB5DjKz/BOw9e2Hs9+5vrQdPZey97HSv+QEQI2tWxq2J+5qdCY/QWT9+5TdX54DXcS7lgAoImxdSgSKSoACAFEAJwB++P8seeADd3kJgKKOwoxdzJn7oKyPzn77TyXsNOx9B7jSR0QA8721LQ7bY1sb4e4XsRhW/PLynzH0FXsiCYCKHVo9WNUTYIY4RICrAnj2f5ALIAFQjp+JNEL5tPBlqP/E+aRz9mOmPxv5MJufRj4tSO5jed/d7XWu3C8Gv38JgHIc7eLeswRAcXnraiJQPAIUAPjDZkCDz1AA7MW1a1z2v3MClBFQ8cbiFq5EC1/Pztez9O2GxS+jAXT2o8HP0tag3YXyvnbY+y5Cwh8Nf/hz7QDcAvQqeasEQJUMtB6zOgl8KAD+j9sKuCwAvv5trwxQLjAl/8Fgq949nQnbfzphR855nv5+TPDM+p/XFLC1iyPO4Gd5a8giauZT8uNZSjcoAVBKo6F7EYECEGAOwMAz/3tCACArfONma/r6nzoBUFODNHGJgAJQn7lTXoQA2HsSAqAr6Tz+h1ABEEPYfyWy/u9q95z95qLEjz+jra+Gc+bYV/qZJAAqfYT1fFVP4GMCoOM2a/ratzwB4PdDAKgZTCl8SGjiwz/M9B8czbq/N8b8+H7cTsPc5/iFpB09m7LRVA57/gFbszBi2+Dpvxi1/7L0LYURLL97kAAovzHTHYvAtAh8XABsssanv2lR5ADUBNAK1icBMC2gBXoxDX6ycPVjid+eE2OGqj+06/UMfHLjNa6db+cFNHjCaxa3hBD+D8LT33P206q/QINS4aeVAKjwAdbjicDHBMCGjdb41W94EYBgyGoYBdAxawQwnyOhz8v0vwQvf5b5vQ8BQJ9/Wvhyj3/p3JCr6+d2AA929atDpr8OEbgVAhIAt0JP7xWBMiDwUQEQXg8B8JWvOQHgC4chAAJl8BSVe4uuzA92vqfg7PcunP2Od6esD5n/9O1rbQy4uv77N9a7UH8SNf88lOznMOg/t0hAAuAWAertIlDqBD4uADqs8ak/8QRAJIptAAmA2RhDrvpp4jMwmrPuvozL8Ke1bze2AHLYDogiqW8eBEDHsqg9vLkeSX+h2bhNXbOCCUgAVPDg6tFEgAQ+JgDWbbDGJ7+KaoAt5quttZog8gB0FJ3AKFb9F9HMp/NC2mX5n0Ki30A8awm09eWxAGF+bgFsXBaxdrj7MdNfhwjMJAEJgJmkqXOJQAkS+JgAaF9vDV/6ikUpAGIxqwlpZVnMYXNBfPznIvb7D3Yl7ADK+/inB2KARy2a9zQjy58r/i0ro7ZqQdjmIhJAxz8dIjCTBCQAZpKmziUCJUjAEwAwAqITIBLLwhQATzzlIgD++noJgCKPGUv9mMlPd79X9ozYwTNJG0LZH3MB6OC3BGV9d66pdcl/bOXbhFJAdvJjjb8OEZhJAhIAM0lT5xKBEiTAiX/gmQknQAqAteus/gtPogwQEYD6BmMioI7CE5jM9qcA4FR+HNn+L70/bIfg6z+G2v5QAHv+cPZrWxRxAmDFvJBb9QcDmvgLPzrVeQUJgOocdz11FRG43Atg3x7XGyDc1m71j3/J+QD4G5usJhypIhqz96hc4XPf3yAAalHC14tmPu8dH7Wj3UmXBEgP/7vW1rmmPtzvZ5kfLX+18J+9Mav0K0sAVPoI6/mqnsBVAgA0wmvWWv1jT7gqAH/THPOhEkDHzBPAPO8m+zEk9fUjuW8Q2f7Do3mLhNDAB3X9NO/p7k/jT8b9aYC3/zY09VkyNyhL35kfDp3xGgQkAK4BRT8SgUoi4G0BoBsgIgA8QqvbrP5zX3A9AQLNLeaLSgAUYrwn9/rP9GbsnWOjdhJZ/vFE3oX571kX88x9IAKYD0D73yBW+3PqJpL98HMF/gsxKjrnlQQkAK6kob+LQAUS+JgAWLXG6j/7uCcAWua6UsAKfOxZeyTu9efo7IdwP8P8xxDi33V01E5dSlsyNY4Vfsgeuq0O9f0R1PkHLSZHv1kbq2q/sARAtX8C9PwVT+CyAJioAghRADz6mCcAWlshAGIVz6CYD5jBXj/D/qcuwdnv2JjL9r+EEj+u/mnww8x+NvFhfT9L/Ljq1yECs0FAAmA2qOuaIlBEAh8TACtXW/2nP+dyAAKt850XQBFvp2IvxVB+Gs5+3Ovn3v7Rc56179neNJr8YOsFIf6GWp+LAHSgyU/bwrAtaw0bO/7pEIHZICABMBvUdU0RKCIBJwB+wBwAzwcgtHKV1T38WScAgvMXQADUFfFuKvdSdPCjhz879u3uHHMOf/34fgztfHm0IrN/Axz92Nxn9UJ080P4n9UA3PvXIQKzQUACYDao65oiUEQCyf0f2IATAEgCRGZaaAUFwKMTAmCh+erqi3g3lXupeDJn7Na3H65+r+2P22ns+XPqj9LZD2H+FXD22wRr39ULQjYfrXy191+5n4VyeTIJgHIZKd2nCNwkgQ8FACMAeQstX2mxhz7tfACCCxdLANwk14++jfv+tPM9cDppv/sg7pL+fHDvXYQ9/60Tzn6L8fc5dZ6zH13/dIjAbBKQAJhN+rq2CBSBwMcFwAqLPfAIIgBbLLhosfnhBqhj+gRSmTwsfPPGrn6Tbn1MAGS2/1uHR+08ogHhoA/7/BAAbbW2Yl7Y6qM+OP5p4p8+bb2jEAQkAApBVecUgRIiQAEw+Oz/dTkA43lYzi6DALj/IU8ALF5q/gYJgJsZrkuDWdt/esxGkN3PTH6697WiaQ+FAW1+x1AGyAS/lomf18Poh6t+OfvdDG29pxAEJAAKQVXnFIESIvBRARBcttxiOx5CN8DNFly6DAKgsYTutrRvheY+NO0ZiOdg7JOyPUj2G0LWP7v3LYd3P9v3NsLSl7/P48UUAOzix0Q/n2b+0h7cKrw7CYAqHHQ9cnURSB74wIae/X+WYC+AXA6TPgXAgxMCYLn5GyUApvKJ4OTPSf1cX8bV9x9GEx+W+zH7n4181iwK2yOb61HbD5tf/B99/Lnix69g+4ufKPI/Fcx6TREJSAAUEbYuJQKzQeCyAIAR0HiWAmCpxe57wHUDZDSADYF0fDIBTvys8R9lmZ9z9kvZ23D2YwSAzX34+yhW+euXROwzd9RbO8r8uPevJL9PZqrflAYBCYDSGAfdhQgUjAAFwCAiAPQBcBGAJRAA9+5wOQCsCPA3SQBcDz6T/JIw+Dndk7Z3MPEfPZc07v+PJHIuAbAOe/tLWoK2YVnU7qXHf2tIzXyuB1S/KxkCEgAlMxS6EREoDIHkgX2eANg/sQWweInF7qYA2Gw0BWJHQB2fTIATPcP+B8/A0x/Z/RQCFAVc4TOrf+GcoAv/ty2iyU/YWpAPoEMEyoGABEA5jJLuUQRugYATAD+cjABkUfpHAXDfhABYbf45zbdw9sp/axcm/DcOxu1AV8IJAWb9M+zP7P51mPDb8Iee/gsgBJjprzK/yv9MVMoTSgBUykjqOUTgEwh4AuD7lmQEIAsBAPOf2u33OiMgtgaWALgaHLv5cYXPg6t8evm/fmAEAiBp5/sz+J1ZE7L7lyHUvxGe/qvh6c8GP5z8dYhAORGQACin0dK9isBNEKAAGHru+6gCYBJgxhMA2+52OQDhNRAAzS03cdbKfUsaZj5M7uNBu15m+TMKcAhbAO8dH3MJgbT0XYOJn619m+v9zu5XSX+V+5mo1CeTAKjUkdVzicAEgeRBCoBnnACwTMYCCxZaFAIgyhyAtnYLSAA4Uikk+g1jv38wnrXe4Zwz7Jn07GfIn85+rPtnhGDT8qhz+GOdPzP+dYhAORKQACjHUdM9i8A0CEwKAFYB5CEAggsWWPTO7RMCYJ0FWuZO42yV+9IelPgdOpOwE3DxO9sLTrDsbUdi34r5XOkH3fds9csOP57BT40Mfir341AVTyYBUBXDrIesZgLJg/tt6EdeBGA8kza2AI5u3QYjoC0WaqcAaK1mPJed/U5dStm+kxAAaOfL1X4EK/t1qO3fiNX+5pVRl+RX1aD08BVHQAKg4oZUDyQCVxPwBMAPLMEkwDQEwLz5Fr0DAgBbAOH2DeafW70CYByx/W4k9r17PGFH4Ox3ri9t/dgCSKbHnYXvkhYv0e++DXUu6e9qsvpOBMqbgARAeY+f7l4EbkjACYAfQwBgC8DSKQtQAGzZ6soAw+s7LDB33g3PUUkv4H4+LX3ZvrdvJGvHu+Hsd2zMTmLlz5r/HPL/IqEam4t6fmb6tyMKcPvqWlfvX0kc9CwiIAGgz4AIVDgBTwA868oA86mUBVvnXSEANloA31fTQVtftu1lZv8uOPsdOZeyiwj5c/LPYIu/Nlzjmfsgy/+2lbWuyc8cJPtFQkr2q6bPSTU8qwRANYyynrGqCSQPIQfgxxAALAOEAGDIP7r5dhcBiHRsggCYX1V8KABY6sdmPi+8O+TK+1gB4MP8Xh/x2/w5AWfssxbNfdYvjbo2v1UFSA9bNQQkAKpmqPWg1Urg4wJgrvMAYA5ABC2BuSVQTQfL+HIw+jkEAfCLt4fsIBz+KAiY2d+GSZ+Wvm1XmPuEg2rjV02fj2p6VgmAahptPWtVEkgdOmCDP5mMACSd8Q/7AERQBUAREEBVQCUfdPVLpPPGVX4af/ww7KNr3wWE/V87ELdOlP2x2Q8NfdjQxxn8oLlPQ62c/Sr5c6FnM5MA0KdABCqcQBICYPgnP/SqAJKeAAgj9M8yQG4FVLoA4N5+N5r5XBrKWj+S/urQwIelfdzTP4uf96P+nwmBUXzPTn4tdPZDe98gbIB1iEAlE5AAqOTR1bOJAAg4AfA8BABzAJIJ5/0f3gABwCjA5jtgDLSwIjkxrD8ylrMLgxln7sOOfhQAbOJzD9v2wsa3xlfjtgMSKPsLYMGvZL+K/CjooT6BgATAJ4DRj0WgUggkDyMC8PxzngBIUADMsfD6jS4JsBblgLQGrsSjDyv7o+eSdhRlfnT360EEIJ3NG+19t7bFrB1d/BahiU8MiX9MDIQWcG5/fv5FhwhUAQEJgCoYZD1idRNIHT5oQz+dFABj5m9sggDo8HIAbt+K5kCLKgoQ9/sH4zlX5rcfCX6c/Ln6j2MrgA17GObfvjZm65dFbBmiANrrr6jh18NMg4AEwDRg6aUiUI4EPAHwI/gAoBfA2KgnAOAAyERAOgJWkgCgs9/5gay9f2IM9f1J5+nPsD87+tVgYc/ufmsXR+yh2+ptLbL9+X0Inv86RKAaCUgAVOOo65mrioATAD/7sfMBoADwNTTCAng9kgAhANATILhocUXwYJY/E/6OY8X/xsG4HUPofwjNe7II77OUj/v7C5tD8PcP2zZsASxGpn8NVAGFgQ4RqEYCEgDVOOp65qoikDqCLQAIAJcEOEoB0GCRtnVeBABdAStFAHDPn65+7Oi3vytpF+Dxn0EJIG195zUGbPWCsG1eVWsr54dsTl3AZf1r8q+qfwp62I8QkAD4CBB9KwKVRiB15JAN/XwiAjAaN19dg4Xb2l0VQHQbBcCSsnzkSUMf3jxr+/tHckj6S9lBCIAP0NWPPv8s7ZuLrH9O+muR9NeB8r95jcGyfF7dtAjMNAEJgJkmqvOJQIkRoAAY/vlP4AOAHID4CARAvYXXrPWqALbdY8HF5SkA6Oc/mkTnHkPnPuzlUxDEE3nX1W/nvhHrRURg4ZyQrcDk7zL+EfJvhLlPGG1+dYiACMgISJ8BEah4Ak4A/OJ5lwOQowCIxSy8ekIAbKcAWFpWDOjsR+e+QbTtpZsfhUAD9veb8Iehfa783zo8aoPY/2eZ3xJk+i+fF3K/L6sH1c2KQIEJKAJQYMA6vQjMNoHU0cM2PCkARoadAAitWuMiALHt91lwSXkJgDhW/ezedwLte/efStgQzH7moHXvKuzx37mm1k30zPynERC3AOjqF6Ozn7L9Z/ujqOuXGAEJgBIbEN2OCMw0AScAfvlTRAD2WI4CoDZmoZWrXSOg2D0UAMtm+pIFOR8n9HgyZxcHs3YSk//R7qQdQrLfCML+jAB0wMf/c3c0OC9/JfcVZAh00gojIAFQYQOqxxGBjxK4LACQA5AbHjJftBYCYNWEANhhwaXlIQD6EfKnqQ/L++jw140s/2Gs/vNIA4hghd+B1r1fuKvR7ffTzU8i4KOfBH0vAlcTkAC4moe+E4GKI+AEwK9+5oyAckMUAFELrVjpCYB7KQCWl/QzJ+nsh/38s70Zl+HPOv+unrTz+fdhomdnv3lNAVu/JGqf2hBz+/0SACU9pLq5EiEgAVAiA6HbEIFCEUgdO2LDlwXAoPkiEQsthwCAE2Ds3vtLXgAw0W8vyvq46ufEz+z+UTj7wfTParHyZ5b/9rV1rsyPPv91qAjQ6r9Qnyadt5IISABU0mjqWUTgGgScAHjh514VwNCA+cIUACs8AXDfAyUvAE5dSturKOs7cDqBzn6erW8Izn6N2PdfMCcIZ7+Ic/ZbOjdoWvlf4wOgH4nAJxCQAPgEMPqxCFQKAScAXvyFJwAGKQBCmPQnBMCnHrDQshUl/aiTAmD/hADIo+C/eSLr/47Vtcj+D1kzyv8YDTDY+srZt6SHUzdXQgQkAEpoMHQrIlAIAqljR22YAoBJgAP95guFLIDEv+imLRbb8WDJCIBJZz928xsey7v2vE11flfmxy2A40j+6+5PO0SLW0LWtgjWviujrr1vIbjpnCJQ6QQkACp9hPV8VU8gdfyojbz4SwgAlAFCAFgQEQCU/kWZA7DjIbcdUAqQJp39mN1/6EzSte69Y03UrfaZ7X8J4f8zvZ4AWIaWvvOR+MdtgIic/Uph+HQPZUhAAqAMB023LALTIZCGABj+NQUAIgD9fVYDARCA+58TAPdTAKyczulm/LU5LP3ZyW8wnrPzmPw7UeN/EAKAHfy2t8fcSr8FIX8YADoDIN7AfOz9M9lPhwiIwM0TkAC4eXZ6pwiUBQEXAXjpV14OAASABQLO/5/tgGMPPOJKAmfzQcaQ0c/Mfk78ezoTdhpJfyz7i6KLHzP816O+fysc/tjRjxbAPCIQBwG/dvtnc9x07fInIAFQ/mOoJxCB6xJInzhmw5MCoK/XEwALF3sRgAcpAFZd9/2F+qUL+WPy7xnKGBP9jqGT377TSYT6M+6S3P9fAQ9/OvwxErAYzXx0iIAIzBwBCYCZY6kziUBJEkhBAMRffsES+7AF0Ndj5vNbEAKAPgB1D3161gQAV/mnLnrOfofPJu1cX8Yl/KWxyvcjur8U+/z3YOLfAAGwBCV+Dejkp0MERGDmCEgAzBxLnUkESpIAIwAjr7zoCYBeCgA0xlmwEAJgCwTAo84WuJg3TuveTC7vJvzdJ8bcfv9JCAEKAtbxc2+/tTFoa5Dlvw2h/xXzwxbDz0Jq5lPMYdK1qoCABEAVDLIesboJpDuPOwGQRAQg23MJAqDGgvMnBMDDFACriwoolcmjgU8Ozn4pe3X/iPP2H0WHP5YBMqOfrXsZ8l8LAdCKff86WP1yvx+3rUMERGAGCUgAzCBMnUoESpGAEwC/ecl1A8z2XMQtUgAs8LYAHvlsUQQAbXvH8R9m8qchAGjlSwHw270jLvkvj9/Fwp6zXzuc/e5qq3VbAAHM+ghY6BABESgAAQmAAkDVKUWglAikO09Y/LeeAMhcogBAHuC8+U4A1FMArFpT0Nvl5M8JPovZn6t/rvSDWNGzuc/rB+PG8D8TAufBx/9OhPxXLQi72v/akOfpL1//gg6PTl7FBCQAqnjw9ejVQSB9kgLgZVcGmLl4Hg89boFWCACUAdY/+rmCCQBO/Kzx52qfZX4jMPNJQgDEYNm7ZG7YiQEa/rDZTxrigGV+t6+qdf7+1TEyekoRmF0CEgCzy19XF4EjgXCJAAAM0klEQVSCE3AC4HevfCgAkIXnb51n9AGof/QxC60uTASAK/4EMvpZ1//O0VGs+NOIAiC7Hxn9OzrqbVFzwImDNFb/3v5/jTXR2Q8rfx0iIAKFJyABUHjGuoIIzCqB9MlOi++EAIATYOZ8N+LxEABzW50AqPvMYxZe3Taj98dVPyf1IWT1s3vfEbTxfffoGLL+066FL7P7H9vaiPK+iIsGBJXdP6P8dTIRmCoBCYCpktLrRKBMCaRPddrozt9YwgmAc4jLo9yupdXlADR85vOIAMysAGAzn4EROvulbXfnmJ2Aw1//SM7o+MdE/pVw93tocz0MfiI2tyHodfErU7a6bREoZwISAOU8erp3EZgCAScAXv2t8wHIdEMAZLMQAC3OB6D+s4/PWAQgw5D/xH5/V08aWf5JYxe/i9jjRzqAC+03w92PSX53INlvNb7S4z/KNr46REAEik5AAqDoyHVBESgugfTpkxaHAKAPQObcWQiAjPmbrxAAa9bOyA2xY98ZZPafOJ+0A11JOwMRQHMfZv77UM63qDlod6yuNZb5MQ+guS5gIXj60/xHhwiIQPEJSAAUn7muKAJFJeAEwGs7JwTAGdjwpc0/p9mLAHzuCxaeIQHQh7D/se6U7T+dMDr8Mbu/BjV8dPGjoc+ahWE09Ym5LYB6mPuw258OERCB2SMgATB77HVlESgKgfTpUzb6+k4vB+BMF5x4JgUAqgAee2LGBEA/BMDx8xQASXvv+KhdRAIgJ/ll8PS/a23M2heHXa0/J3/6AMjgpyjDr4uIwCcSkAD4RDT6hQhUBoF0FwTAH15FBGCPZSAAxlMp8zfN8YyAKADa2m/qQZnsxxA/vf25yqeZT89Q1iX97T055n7HBj6r4OV/19paJwSY8a+Q/03h1ptEYMYJSADMOFKdUARKi0DmzGkbfYMCYK8xGjCeSnoCgD4An//iTQkA2vqeH8i6UH8Ktf6rEd5vbQgYJ/gh5AIc6046QbAQ+/40+GlGsl8tkv182BKQs19pfT50N9VLQAKgesdeT14lBJwA+ONrEwLgpOWTEACNTZ4R0ONfmrIAmLT0ZeMehvtZ3vfe8YRL8uP+PkUAvzKx7wLEAR0HF8Del9EB5gLoEAERKC0CEgClNR66GxGYcQKeAHjdGQGlT0EAJBIQAI3OCriBAmDtuildkwY/zOjvgrPf28fGXDOfS0MZ2gpYAxz81iO7/5Et9bYce/60/GXToQjEADv56RABESg9AhIApTcmuiMRmFEC3PcffXNCAMAVMJ8YM3/DhAD4wpM3FACc+DOY5Fnmx5p+1ve/DWvfLpT8cd+fYf9G7PVvXB61z95R76IAWvHP6BDqZCJQEAISAAXBqpOKQOkQyJylAHjDiwCgMVB+bNT89Q2uDLBhCgIgiT1+2vqeZMgf5X0nkOnP5j509mOXP5r5sLZ/47KobVkVVTOf0hl63YkIXJeABMB18eiXIlD+BDJnz9joLggAJgF2Hrf86KQA2GwNTzx1wwjAZHkfzX3ehwA43w9nP0z8YTTtmYPQP8v8OrD6XwNnv0UtQWPmvw4REIHSJyABUPpjpDsUgVsikDl3xsZ2vekEQOrEUU8A1NW7MkAnANrXX/f8nVj5/2bviB2AwQ/Nfmj3y5y+BXOCrn3v2sV09gsh09/vbH1Z469DBESg9AkURADkx3OWHcf+YD5lqXwCYcIc0oF8FvSFLeqvw9dQ6ZPRHYpAhRDIdLEM8DUYAcEHAGWA3ALwRWudAGh88mkLr9tw1ZOyNS9b+fJgAh9D/y/vHnb2vizxo3NvCyZ7evp7zn5htPH1qY3vVRT1jQhcn0Amn7ZELu7mSTTExr+rgIV9ETdPBmqC+L7wkbSCCIB0Pmnx7KANpnusL91tydyY8YEag622pLbNGoLN1yej34qACMwYAYb9R15+0eUAZHsuoQwwYTWBoEU3bbbGp79pkY5NV12LrXxHk8j6wxGL+N3+P+19D59NOqtfuvvdiWY+a+HsNx9lfgz5y+DnKoT6RgRuSGA4029nx47ZUKbHLZgj/pi1hBZZU2iu1QWaLAQxUOjjpgTAOOp78+N5/tfdH1f3vhqfpbHaH0r3WX/movUmz1ovJv++1Hn8PAllU2tLomvstjn324LI8kI/l84vAiIwQSB94piNvPSCiwDk+npdGWCN3+8iAE1f+1MIgNvcK52zXzxnA6NZG8RXTuqLsacfCvjc9939aScAItj737o6akux9x8O+lTmp0+aCNwEgQvJ0/bBwGt2NnEckfIxN+G3hBfZnOA8LJZbrDbQ4H4W9kXd15A/4r4GakJuvoWl1k1c9eq33JQAyCGkz/A+Q/s8GKpgeL8v1W37h9+wYyN77MzYURtIX3RbAH6ENuqhaNrrt9kj879hq+o2Xn0X+k4ERKBgBFj7P8p2wPu9boDcAqgJTkQAvvoNi2zY5JL6zqPE730Y+3DPvy+eRVjf77r3LZ8XsjpEAmgEFEdkgFa+c9DWNwohwL/L46dgQ6cTVzCBzvh+++3FZ+zIyDs2goh5bhy9MzDZc5s8hsm/MTjXWsILERXgn0Xu782hBS46wPnWPwNbBJ8oALxVvjfRpzHZc3WfwkqeXxnSH8uOYGhqcDONLqQ/JzQP4f7z9nbfS7Zv6A92Iv4BQhu9UCxR9xre+IaG7fbQ/K/ZylhHBQ+rHk0ESovAx3wA4iNWEw5bGFbADU99zXKr1nvOfijvewcGPycvpmHnm3XWvtvbY66+f/k87vMXfk+ytMjpbkSgcAROjh6wnReftYPDu6w/fQHb5kNufuXcG6wJu3nTEwDe5O8JgYWYbxkdQBKvv9bNr8wb4DwbgiigMOCCfKrRgWsKAN4Ay3yS+VEX0h9ASJ+hfO7n82s/Vvbc36dSWV13m/uzpn6zZfMZTP5v4IHessPDb9todtiaoWBaw0tsQXiZrcTKv6PxHvd94bDqzCIgAlcSyHSftbF3drkcgNSxI5YfHkISYNSCHZut9gtfsUstbTD2GbMjMPi5OJhxhj80/mGiX8eyiCvx24Qyv3nY79chAiIwMwR6UmftwNCbdhKRgAupLuP3/ZhfKQQy4yk3iXNin5zgJ7/GsOhuCrVac2j+RITAEwhzgvOtMdRiEV/MWW9PRQRcJQAY1h/NDWN1P+y+Dmewn5/C5I+VvScA+LUbof1LCFkMuBDFxsZ7bV3DXdZWv8VROTay2zqx+j81dtBSucSHIQzsbSyKrLLlsXU2N7zYav317vVjuRFkQo66PRAKiGsdAV/Q5RBEkSSh931ISFz0eZnKv4dMb4+NHTpg6SPHbPzoSbOhuNWgCqBmzWrL33+/natb5ARAV0/aWf0y1O+F+QOo8Q+jm18ECX8Ra2lQBODDf336mwjcGoFRTPTMA7iUPOMtrifmWSYHsjqAuXPcFuBWOxflPDipM5+OifSMujNnwEUGsNCmIGCiPaMDTLr3uz+ozoEgYNSA8ye342uQrzd5XCUABpGNeAphia6xI8hOPApFcg5h/D4X7r+8BYBJPTOedjfWjL2J9djXX+Ym9UUufMGwBpXMWDaOFMHcZfXCjMYWbAMsjbXbslr+8fzHu8YOW3eiExDOOtExeWNXfo35G2xeZIktiq7S+64AIy7DV9D48K/icjWXTDxu8UsXbPxMn0U7Ryw4jLLccMgS8xqsvw1bd3VRtwXgOfuh9A/7+rVh5O1Eg9YcC8PmN2j1tT6XDPghZf1NBETgVgjkMI9yO51/ONlPzrEsnU9CAHBhnMACmVvwV4oATuJMBGTIP+S/OkIQxvesJuDCIIyJn/PuwsgKF3nn/EkRELiiDP8qAdCdOGHv9L9ih7AnwYm5F6t9r04xfdVzUl2Esf+wOLrabmvc4cL8vGFGCljWQAVDL/CPhiDqoVpYCdBWf7ttbnrAnXPv4KtIGtztMiFH8L5rHXqfuOjz8uG/jOn+e8hkMjbG2v/etMXO5i00gn+ZSAIcrfdZz/xxG4uhbx+X/Tj475ZGPlEIgNpgALX9QewrauX/IX39TQQKS4CrfgqCJCoDriUAPunqnG+5/09hEIUAiCBSQAGwIOoJAC68mxAhYPSgLjDH+93cRVbT1NQ0PjAwYMfje+zXF/637Rv8I/b4LxrD814Iwiv3m7ww9/4Zbmhv2Gb3tz7lTrR7YKcdw/vPJ046DwC+9qNFCqxtXBBdaR0N99j9855yp3vt0vN2YPhNu3DF+yavM/lV7xucRHHVV3ERl6n8O8rD2SeXy1pNfNxCl/zmSyAEiEk9WztuiZasZaNeNc/kh8sHEcAtAL/Py/Ln9zpEQASKQ4BinNFzVtt9dAvgRncwKQIYJWCVAP4Fu4gAtwDmYptgQWSl24Zvq7sdc/hCW7two/1/AAAA///xuroTAABAAElEQVTtved33Nd5Lfxg+qADJACCFSDYxK5KFatZtnRv4hJFzpX1+l57xVnJh+RDPuUPyB+RN++KV9yS2Ip1E8dx3CNLlCxLFEWxF5AgwAoSAIkOTJ959z6DIcGONsCUfbRG037lnH0GPPs8ZT8V9fX1mcGhQescO2D/efn/syMjv7PxxJDF0hHLZDJ2e6vzL7c1lZttZ/2z9nzTH1sqk7T/7vuBHRv5wAZivRZNjZunwmsV+G96q/bV24pwu22rfcqea37VffVe/4/t+OiHdjXSY+PJ4emH33it84SLfi83/hxstn8PafwNp9IZS0/6LDNUaZlIwDIV+NsMJSxdN2aecMJ8ngrzejz4u8Vf7a1/tjdvrFdCQAjkHQGuuWlLYV3lI2lpPGfw30wa11yuvd4KHx5e85jXQt4qq/Uvs+XBVlsRard1VVtsY/XD1hhotU2t262CBOD64HU7O37Yfnn1+24hH4xftcnUWPbmt5GApuBq21b3lCMADze86Bb8t/t+aCdH99tYYtCSmbgFPGHXiemdrvE32urwBttY87Dtqn/efXV4eK+dGTtolyJd7tzpx+de67zBHBS3PAsX4TKTv6NEKmXRRMIi42GLXG+yRKTK3CofGDer7rVg5aRVh/wWDvjM7+U/Hp5bfmd6IwSEwOIhwEU/no5aND1pEazB8XRsRiQgt/gHPEELe2ss5KnEOhzCprvNrddrsWmv9zeBDDRiE9GQ/W75ypsE4Eq0xw4M/rf1TByz4cSATSRHLJaKwBIQRScilkBHkpmEYxGPN37eHqrdY2urNtu12GX79dV/slOjn4AMTDikyDqC3koLggiwE3xuDLTYGhzPjqyt3OKOuzB5ynoj3dYfvWQTqdG7olzlrbXm0GpbGV6v86YhJFz0e7nf31E8kbbRyZQNTyZteDxmY+NBmxxdbsl4FXb7FVZZNWnLmq5ZQ13UasOBLAHwYNcAS4CaEBAC+UUghY1yNDU5tcZG3KJPqzsftKJHsJbejQBwd++rCGBdDVrAG8baGsLr7HMQ77n2VoIABD1Vbu1tDWUJANfPML7zeQI3BtbQ0JAlAHQBcPEeivc7UzwZyERy1EZABAbjfXY9dgWvrzlS0IILPtP0RWur2mqBiqCdGT9o/3Hp/7UTox87kwU7GPZVW61vmS2D2WE5TA18bg2td+aH5cFVroPsBa0MHGgMbCeZTtzo2PQXPo8fg6l0nefA2HSeYSKFy/TfSe61cMn+HV0bTdqJC1Hrvhqzy4MxG8GGP5UIwkTos6DfY+taPPbEFq+1rYCZEO/9XrgAQAzUhIAQyD8C3GBfjZ63gehFux6/Ytfw4Do7mriONXHcEYLbXQDc5XMt5C6+IdCMdXWlLZtaX7nBrsMOv9JXA4LghyWPDw8sAVkXABd/rs0V0yx8NwjA0NDQjRHT30A/RDQ9YSPx6zaUuJUANOBGu+D/581JGk6O7rOf9f4jnj921gJ6MPwgBtW+Orfw02XQElxn7dXbnCmC79WEgBDIDwKReNqGxlN2rj9uR3om7dzlcRsaGLXU+LhVYccR9qQsFPRae3ujPf0MfILrGlwMgDb++ZkPXVUI3A2BgdglOz7yofWMH7e+GIgA3pMAjIMYJDIxF0PHnX3Wgp7b5YetCutqfaDJWdS5sV4WAAnAc4MfBCCwzC34FYzlwX8PanclADyJJIDBBzT70weRdQHEnQuApgcyDQYZcCfeM3HcPrr+M+fLv9sAGLREdrIVLoMXW1639qptD+qXvhcCQmAOCJC4XxlM2CddEeu8FLVL1+MWuz5oNYPnrHnsorVFLlljZsK8Qb81PLTJ1vzh561+Y4cLCVDw3xwA1ylCYI4IcN18p+9fYTnf56zsDILnOsu1N7eBbnQLfNaC7hZ67PbrENDHXX4ILvac6T9LFILmx9p8twD8e3XxngTgXidM/5zxALQA9McuIoDwiF2OnLXBaa6CrGk/4swONSABm2set5da3rD11dunX0avhYAQmAcCjNFlpP9kLG2DY0nruhKz/acnrbsvjhiApIUnrln72GnbMNppm0ZO27LEsHmCQQtt32V1r71uoa36e5wH/DpVCMwJge7xY8bg+c4xBM9j8ae5n7FyNNVzl89suxsEYMrMT3M/N9Rc6LkBn2+bFwFwyQqwEsRgVqTZIue3mHSxAzddB4wnoN+CGQA7G55DEOG6+fZb5wsBITCFAFP8EsmMXRyI28dY+DsvR+3qcMIFACZSGSz4g7Y10QUCcNrW9J20uijcfQEE/e0gAfiqCIB+SUJgCRCg///I0HsuA44xcDT13zDlu11+rfssF0Qf8NINEHIBgB748Wdi4n/QsOZFAO51cS74NGcMxwcQ3EBdgEkXlEC3werKjS6A4V7n6nMhIARmhgDWfUtigR+LpKwfC37n5Zh93Dlh50EE4okMAvqQ5Rf22mrPsG1LnLW1g51Wd+6ohcauWUUAqUIiADMDWkcJgTwgMApifmnyjAu0pzWdJn2a+enf5y6fi32+W14IAGMHOCDGDzClge8hT+DMFmFvNZ5vpiHke4C6vhAoVQTi2PWPR9N2rg8m/zOT1tUbs4GRhE3gM7oEGqp9tqE1aBtCo9YBoa3G3hOWOXrAMtf7rcI/ZQH4yhuyAJTqD0TjKmgEEum4s5pznaQ1nb57ugBo3mcUP9/nu+WFAOS707q+EChnBJLY+sewwx8aT1rv9ezO/0DXpHtNd0DQX2F1VV5bs9xvW9eGrT0was2DZy1w9phFDuy3RP9VEYBy/gFp7EJgCgERAP0UhECRITCBYD/u9LsR7HeoJ2I9CPYjGYjE4BPAXqKlwWc72sK2eVXI1jUFrQHuOO+5TkuePAIC8LEl+q6ax+/PBgH+CS0AO4oMAXVXCAiBhUBABGAhUNQ1hMAiIMBAPy7+/Vj8z2HRP41gv2MXIiADSXf3cMBjy2p8tn5FwHavr8Rz0L0PjA9a/PQpixw7bJFP9lny6lUzEAAXAyACsAgzp1sIgcJEQASgMOdFvRICdyAwPAFxH/j7meZ38mI2x59Sv4wFoLTv6uUBe2xDJXb+QVvZGHBuALoDbOi6xc50WuRojgBcgQsAFgAGAYoA3IGzPhAC5YKACEC5zLTGWbQI0N/Phf4yRH1OQdyHwX7dIAIkBFz4q0Mea6rz2yYs/I9vrLS25qBVBhF068sqgaVGoSx26aLFe85a7NQJS6LwV4UPcsDtHVb1wksWaFtftNio40JACMwdARGAuWOnM4XAoiBAE/9xmPpp8qe4D1P+spH+qOgLs/+65oDt2VTlfP5NdT5HCLxelgXNdi+DSoDpyKSlJ8YtNTpqmXjcKvClp6rafE0teEZ1QDUhIATKDgERgLKbcg24WBBwmv5jKevpj9lhBPudhem/D4t/NA6pUOzu6yq9tqLRb1sQ7PfExipb3eQ337SF/27jpFQwG7XC1YSAECg8BJLJpMViqLyLZ/6d+mitg3KnF6W679bS6bQlQPJTKPvN16zmeb/jp19DBGA6GnotBAoEAS7UvdT0PxNxZn+a/wcR6U93ABf5eqT5McjvMZj8O6aC/cIw+3NZ19peIJOobgiBOSAwMTFhfX19Njk56Rb96upqW7YM+v+VlXe9GsnCKCx7PJ5EgIv//Y6ffhERgOlo6LUQWEIEuDnPafpfp6Y/fP2U9u25GndqfykckI30R45/U8A2rw7ZIx2V1trgv2+vM9hJZKLRKRfAiGViURwPFwD+YZEL4L7Q6UshsOgI9Pb22v79++3KFQTrgs0vX77cNm/ebCtXrjSSgQBkvNm426eVgGThxIkTdhXZPSQALS0t9uijj7rjH9R5EYAHIaTvhcAiIZDT9L8AKd99pyfg84/Z1aGEjU3CxAfJ3yoE+61c5rcN2PFvR54/ff8NsAQwDuB+LY0ywIm+KxbvPmvRY0cseQ1KgDATBtZvsOoXP6cgwPuBp++EwCIjcPDgQfvOd75jBw4ccAv6unXr7LOf/axb1Dds2GCNjY2uR3HE8ozjb/vTTz+1H/7wh3b06FGj5fCRRx6xP//zP3fHP8jVJwKwyJOr2wmB2xGgpj8X+DFE+mc1/aO2r3PSSARcih9cfzUh+Pux0++AtO+mlUG3+19e67v9Und9nxpGmdHzPRZFGuDE79+zxOWLVgF/IqsB1r/+NQtt23nX8/ShEBACi48AF/If/OAH9u6779qZM2esCkG6zzzzjD3//POOCKxfv975+QcGBuzYsWPuuH/7t3+zy5cv29q1a91x3/zmN2337t0PjPURAVj8+dUdhcAtCMSQx8/F/1x/HD7/iaym/2jSRfqT0TdA3GcjFv2NK0PumSb/GhT5cTn+t1zp7m9SI8OWOH8OOgCHbOKDmwQgzHLAIgB3B02fCoElQmAYhP38+fNuYf/ud79rp0+fdm6Az3zmM/YXf/EX9vjjjzs//+HDh+0f//Ef3XGXLl0yWgreeOMNe+GFF2zTpk0uDuBBQxABeBBC+l4I5AkBVvJjUB+D+y5D058mf6fpPxiHf8/cAs9gP/r7t60LobBPyFbDBVCL6P/ZNEcALpx3FoDxD/Za4uJ589ACsGO3CMBsgNSxQmARECDp54Om/W9/+9u2d+9e4wLf1tZmX/va15xpnwGBR44csW9961vW2dnp/P7PPvus/emf/qk99thjygJYhHnSLYTAvBBgLn8fNf0R5Mc0P8r7DiH4j+l/jOZvwU5/V3sIAj8hWwsSQJM/I/39yAKYTXNCQBcvZF0A779jcRAAugCcFPDr/1sugNmAqWOFwCIgQALQ399vx48fv2HiZ5AfYwBWrFhhtbW1Njg4aIwXIBl4+eWXnel/z549tmbNGucieJD/n8OQBWARJlO3EALTEaBf32n6I6efhXwo8HPiQtQGYPbn0j5d059R/tT2pxuAn8+lOQIAvz+lgCfee8cSF85lCYBzAYAAbFcMwFxw1TlCIJ8I5IL8Pv74Y/ve975n+/btc+l+JAeMC/BDzptZANu2bbPXX3/dnnrqKWttbbWampoZd0sEYMZQ6UAhsDAIDEHCt4ea/kjzo7Tv5WtxSP1mI/2p4LcGZn5K+jLNj4F/LO0b8FU42d+59CA1NuoC/0gAJvf+1uIkAB66ABgEKAIwF0x1jhDINwK5NL/u7m5nBXj//fftww8/dMF+FAdieiB9/U8++aR94QtfsK1bt1o4HHbCQTPtmwjATJHScUJgngjEEmkbmUjbpZymP5T9SARGpjT9a8Iea3aa/qEpTf+AM/lT+Gc+zRGA3stwASAIcO/byAgQAZgPnjpXCCwmAoz2P3nypCMBP/rRj5xbgPdn0N9zzz13Izugvb191t0SAZg1ZDpBCMwNgf7hpB07H7FOmPwZ8c+yvowDgEUP5v0KV8Rnz+Yq5/Nvgr+/GoSAxX6gBTKvlhobs8SVKQLwLglAj8EE4CwADV/9P3IBzAtdnSwE8osAVf4uXrzoCACj/un3Z+vo6HC+f0b90/xP3/9smwjAbBHT8UJgFghwcXea/oj0p7//UPeknb0aswGQgSgyAKjpz0j/1gafM/k/sana1iz3L8jCn+smCwElr19zQkCRg59YEqJAJAAUAqr57OctgKqAakJACBQeAvT3UxHw0KFDLhvgJz/5iYv6Z09Xr17tzP+M/n/ppZdcgCDjAlgLYKZNBGCmSOk4ITBLBLj48w+YKX77uyatk/5+mP+Hx1NZTX8s/g3VXqfl/+gGaPpD5Kex2udK+TIacJ4b/xu9zaBISCYeMyoCpoYGLR2NwKrgyUoBN7MaYPWNY/VCCAiBwkCA/3awwA8VAXPpgJQJHoNFj43+fmr+c/f/9a9/3ZgBwOwA1gKYaRMBmClSOk4IzBABLvzU9Kd5/zoi+88g2I/SvvT33zD5I51vGSL7md63eXXQHl5f6QL+ZniLuR2GPvEfFTaXIjRf38LceqGzhIAQmAECIyMjtwgCnT171latWmV1dXUu0I+uAQoGsUbAq6++6gSAduzY4TQBZpICyC6IAMxgInSIEJgNAtT0j8O8n9P0586/Dyb/sUjKKP5TDRU/Cvp0QNhnOwR+SALoBniQpv9s+nDPY6cIwLwDC+55A30hBITAQiDAAj9vvfWWM/1TD4C7fS70O3fudLn/p06dsn/+53+2c+fOOWJAqeA/+7M/c7UASABmQgJEABZipnQNIQAEqN7nNP2x0Pchx58L/z5U8yMRSCD33wcBPy7+lPLNSftuWoXSnbAE5LWhY5kE1AVRZjQ5eN0ykYjzL9D075MLIK/Q6+JCYLYIRPD3OTQ0ZL///e+d6Z/+fy+Eu1jkhws8Tf05JcB/+Id/sPfee8+YKcCUQNYAeAFBgQwIpKXgQU0E4EEI6XshMEMEKOvLXT6D/T7pymr6X4MLgGZ/ugS40FPVzy3+8PevaMxq+jPHP5+N5X9TMBfGe7ps8uOPLIGUQFoAGPxX89LLCgLMJ/i6thCYJQK5csDM+//Vr35lrA3AcsAsCPRHf/RH9tBDDzkXwIULF5x1gFLBfExOTjpRIBKAr3zlK04X4EG3FgF4EEL6Xgg8AAGa9RnRTxnfS07TP2qfnp203sEErAIZaPp7rB7BfjT1b18bdsF+q+ag6f+Abtzza2YBpLDzpw7A2K9+ZrGzXY4AsBpgwxtMA9x1z3P1hRAQAouDAONzKP5D0z+r+/3ud79zEf/19fX2yiuvGKP9WQiIPn82EgOa/3ncm2++6bQCKBBEC8Ff/uVf2tNPP+0CBZkZcK8mAnAvZPS5EJghAuPY4fcNJVx63xFo+p/vj6HAT8qiU5r+VPPbjSA/7v5Z2GdZDXT456DpP8Pu3HFYGiZFEoDIsUM2/ksSgDMiAHegpA+EwNIiwIj/WCxmH330kf3d3/2dUQKYn7GsL037XNC5YDP6ny2RgI4I3HqffPKJff/733fnXb9+3TZu3Gjf+MY3nEgQXQHMDLhXEwG4FzL6XAg8AAGn6c/FH/5+FvQ53Ru1kxciRrM/TeyVwQpn9u9YEbRHN1RZOzX9FyvYb1rfHQFA+l/02GEb+8VPswQA37MaoCwA04DSSyGwhAjkCADL/P7gBz9wZYCrq6sdAXjttdfuadLv6uqyX/ziF8bzWDCoubnZ6QKQOIgALOGE6taljcAQdvlnIed7Bg8G/PWijO/oZAqBgIaAP2j6Q9Dn8U1Vthk7fwb+1VWikt88NP3nimY6ihiAYRAA1AJwBKDrtNMYIAGolwtgrrDqPCGwoAjkXAA07dO/z3x/mvTpAqDoz7128uPQ9+DCz/Oi+FunDkBLS4s7j9YCuQAWdJp0sXJHIOo0/VN26VrCTl6MWhcIAM3+XPw9kO6tQaR/c3024O8JEIB1zdD091c4UrAU2LkgwJFhVw1w7Gc/sdiZTpciJAKwFLOhewqBwkFALoDCmQv1pEgQoMn/yLmIncaun5r+LtI/ltX0r4Rvv60lYHsg6csUv+XU9A8tjKb/XOFJuyyAkawFgATg9KlsDACqATa88XUFAc4VWJ0nBIocARGAIp9AdX9xEKB+DjX9GdzXAy1/Rvl345mLP9P/mMrHsr2tSO3bgjK+3PlT7GchivnMd4SUAWYaIGMARn/641sJwFdBAEAE1ISAECg/BEQAym/ONeJZIsDFn3n8TtMfwj6nUM2vl5r+KONLxT8u/g3I8V+PID9q+q9H0F8j3lcGPIwFXPKWiUMEaHzMWQBGfvrvFus8edMCIAKw5POjDgiBpUJABGCpkNd9Cx4BLvyU9Z2AeZ+a/qeh6f9x55SmPz4zfE+TP838a+HnZ7DfrvZw/jX9Z4lcJpl06n/x7i6b+OA9i1887whAYD2FgF6RENAs8dThQqBUEBABKJWZ1DgWHAEK/MQQ8JfV9J+009j55zT9U/iOwX7M698AVb+tEPhh1P+iafrPZrRgMqwISCtAcqDfKAxEnXBPdY2kgGeDo44VAiWGgAhAiU2ohjN/BLjrp6b/KEz8TtP/Mnb+qOZ3YSDhivlQ05+LP/3906V9afYv6EYiQLMGmisUUgj+iYIGTJ0TAqWNgAhAac+vRjcHBHJpfj0Q9znQNekU/hjsNwmzf07Tn4F+1PTfgIp+KxoQ6Q9CkG9N/zkM5c5TpghAQQQn3Nk7fSIEhMAiIiACsIhg61aFjYDT9I9n7Do0/S9eg7Ifdv4HEe1/BTK/3DlT079hStN/Rxs0/RHstxKR/rQGFHTjoo9HemI86wKAfCibqwYIwRA+qwkBIVB+CIgAlN+ca8T3QGA8knaLPdX9jiLP/zxy/IcmkllNf0TzU9P/YWj6b8buf/XyKU1/RPpT9a+gG8sBIxCQQYDje39r8fPdrruB9g3ZIEAEA6oJASFQfgiIAJTfnGvEtyFATf9xlPFlgB9z+7nzPwWRH5r96SZ3mv6I9OeO/zGn6R90Of8hqPsVRSMBQOGQCKoBjrz1Q4ueOOq6zfz/hje+IR2AophEdVIILDwCIgALj6muWGQIDMLk7zT9kebHgj69KOk7CmsAXQLc3a9toqY/dv5I81tR77faKp/5YfWnyE8xtMyUBYC1AEbe+heLHhcBKIZ5Ux+FQL4REAHIN8K6fsEikAv2u4jo/hMXI9YFAnABvv8xaPp7sfDTt99yQ9O/0tYh5Y9xAAVv8r8dcRIApAFGoAQ48q8kAEfcEbIA3A6U3guB8kJABKC85lujnYYAU/wO90SsE/n9F3Ka/ijvy1J5VU7TP2h7NlfZJkT7L4MLgJ8VgrTvtCHM7CUCAGkFoAVg+F//CZLAIgAzA05HCYHSRkAEoLTnV6O7DQEGxDtNf5j9u/vi9ulUmh/dAE7WF359ivmsXAZlP2r6b6y0VYj09yAYoGjT5kkA8GAtgOEfkgAcdqjIAnDbj0NvhUCZISACUGYTXs7D5eLPPP5L8PHvp6Y/Av16B+M2ktP0x+JPMZ8OKPs90gFNf1T14/twgWj6z2vupgjA0A+/7ywBvJYIwLwQ1clCoOgREAEo+inUAB6EABf+nKY/I/vPwNe/b0rTn+I+bDTv367p34KAv1JqdAEM/fB7txKAXDGgojVvlNIMaSxCYHEREAFYXLx1tyVAIKfpf34gDknfSefz70fK3xhS/5ymf6UXkf63avqztG8IAX+l1O4gANt3Wv1X/4+zBFRUYKwiAaU03RqLEHggAiIAD4RIBxQrAk7THzn+o5Npuzocx8Kf1fRn1H82xc+sFpH+VPPLafrT/N9YXeCa/nOcEAoBjb39KwgCnXWBjoH2Dqt+8fPGqoAiAHMEVacJgSJGQASgiCdPXb8/AtF42oYn0tbTF7sR7JfT9GdQHE3+1PTn4r8eIj8t1PQPFYmm//2Hftdv0+Pjlui74iSBXTVASAD7mqekgLX7vytm+lAIlDICIgClPLtlOjbu7hnpf30sZRdh9qey36Hum5r+IQT1UdOfef072xDsh11/K2R+q8OlZfK/Y/pBelQN8A5U9IEQKFsERADKdupLd+D07VPNrwuyvsfOR1yO/xAi/WMgBdzosozvI9T0x86fmv6M9A8FKopP4GcuU8iISDbt+LM46P9CoIwREAEo48kvtaFT05+L/1VU76O072lE+3ci1Y/V/ZjHT01/mv03YMf/KDX9kebHYD+q+5VDc9UA+/qcC4Dj9VRWmrep2VUDrPAoCLAcfgMaoxCYjoAIwHQ09LqoEeBCzxS/M1D24zPL+JIQJFNmfh80/Zf77YkpTf8WmPxrEf3vh+Svp0g0/ec7OQz+c0GAPV3uUoG1bVb17IvGYMCKYNAqvAVe1ni+AOh8ISAEbkFABOAWOPSmGBHIBvtl/f3HL0St60rULl5LuAp/1O2/Q9O/OavpXyzFfBZqTm5PAwxu2WZ1r/6JSwP0hMNW4Sst3YOFwk3XEQKlioAIQKnObBmNiyb/Q91ZTX8G/eUi/enmrgp5YOoPYudfZRuh6U8XAD8ramnfOc7tnQRgq9V9+StZAlBZZRV+EYA5QqvThEBRIiACUJTTpk4zlm0SQX3U8O++GrcD0PTvRtAf3ycQCxCArC8j/Vc2Blyq3+NTmv5MfyvX+Lc7CMDmh0AAXrPQ9t2IAwABCAT0wxICQqCMEBABKKPJLpWhcvGnyA81/T8+PeEC/XoHE1lNfyz+QSz+3OlT1OdhRPuvXxEAGSgRTf95TGKWAKAWAIsBAcQgCEDtF//YWQC81TUiAPPAVqcKgWJEQASgGGetTPucW/jHUbKXZn7m9+87PW7nUNUvQk3/qTK+TXU+W9ccRJpf0Ha0ha3UNP3nOv2OALw5VQyIBGDTFhCAV50FwFsDAoBAQDUhIATKBwERgPKZ66IfqRP4SWTsfD81/SdAAKJGTf9xavrDIsCofi78G+DrfwgKf6sR9V+Kmv5znci7EYCaP/yyhXfsNm9tnQjAXIHVeUKgSBEQASjSiSunbuc0/UcmU0jtS7piPvtBABjpT1LgR/YaF/9VywKQ9Q0i2C9kHZD2ZQyA2k0EaPq/UQ6YFoCNmy1LAHaZt64eBCB082C9EgJCoOQREAEo+Sku/gEyzW9oPBvs9+nZSTuLYD/m/E/GEAyAhYz+/ofWQtMfC7/T9EcZX0b6B5D7r3YTgSwB+CeUAz6UjQEgAfiDL2VjAOoazBMSAbiJll4JgdJHQASg9Oe4aEeYoKY/fPtc7Jne1wmT/2Gk+zHtD0s/5Hs9qNyXNfvvbA+7XT8Ffqqx+KvdiUC8Z0oIiNUAgaB/1Rqr3PO0BddvMI+CAO8ETJ8IgRJHQASgxCe4mIc3CpO/0/SHrO+xC9D0BwkYHoemfyLt1PtWUtO/o9JV81uNkr4N1PRHBgDFf9TuROD2aoAV4UrzLVuelQL2oQQy5YDVhIAQKBsERADKZqqLZ6BO09/5+1HQB4s/ZX0Z8Mccf+bx07zfRE1/BPvlNP2p9sf0P7X7IAB3iaoB3gcffSUEygwBEYAym/BiGO51l+IXdcV8SACo6c9I/5ymP8v47oGy36bVQZfix8U/q+lfDKNb4j6CBLhWrmpISwy/bi8ECgkBEYBCmo0y74sL9kPZXpr6j6OMLxf/yxD74eJPsz4j/ZnTvwllfPegqM9aEAEq/pWbpv9cfyauGmD/VDVA8IAK6P97GxqzKoD+gIoBzRVYnScEihQBEYAinbhS7DZ3+gcR5c9gPwb9XR9LuSBAblYZ2NeO1L6cpv8y+PvLVdN/rnPvggB/+2tjVUBmT/hbV1r40ScQBNhhnnpmAYTnemmdJwSEQBEiIAJQhJNWKl12xmj8bxKR/oNI8zuLHf8n1PTH8xAsAczxDyKVz2n6I8d/C8R9HttQiXx/v4sFkBV7dr+E6LEjNvTmzTTAQPt6q3npFaQB7jZfc4sLBpzdFXW0EBACxYyACEAxz16R953uaIr8UNCHyn6nsPO/Ck3/YSz+LOjDiP5myPquh6b/bmj6t7dI038+U04CMPyvJACHLZNOW6CNBOBlSAHvMt+KVhGA+YCrc4VAESIgAlCEk1bsXcaabyns7m9q+keh6T9h5yDxy7x/Z/IPItK/3mftkPalut/2dZXWjPdqc0fgbgSg+sXPOSlgRwCgBaAmBIRA+SAgAlA+c10wI+Xungv9uf6Y7T8z6aL9B0YSNhZJO4tAPYL92loo6Rt0Zn9K/NZVeZDmpzz1+UziTRcAqwHCArCu3UgAaAHwt64yDwoCqQkBIVA+CIgAlM9cL/lIae5njv8ITPxXYOrvvBS1/fD5X7oWtySK+QVcpL/HafqzmA/z/NtBBOql6b8gc3c3AlD1/GddDIB/5Srz1tQuyH10ESEgBIoDARGA4pinkuhlBJr+FPPphpb/QUj6dl9FpD9y/ifxORvFfbZNafq3rwjA/5/V9PdL039B5j/rAvjnqRiAlAXWtpkjALQAQBbYWysCsCBA6yJCoEgQEAEokokq5m7mNP2vYbG/MBBDml/MjvRErW84q+kfdpr+Ppj9A7azjZr+WPynCvoU87gLre+3EwA/CED1sy+6YkD+1SQAdYXWZfVHCAiBPCIgApBHcHXpLALU9Gek/9krUTsOTf+LA9lI/xjcAV649Vc2BiDpm9X0XwV9f6b9UdZXmv4L+wu6QQBQFjiTggVgzTqrBAEI74AFYM1aEYCFhVtXEwIFj4AIQMFPUfF2MJbIILAv6++nnv+Z3qjT9WdpX2r6U9ynCWl+G1DGl/n9DPyrCauMb75mnEJA4+/8xgkBZRAE6GtqsfDO3RZo3zClA1CVr1vrukJACBQgAiIABTgppdIlmvwZ6Hcaiz9FfljGdyyaQgqguR0+pXz3bK6yzUjzo7+/BtH/3PV7VNMnLz8BSgEnpqSAK5CKWREKmbeuPlsNMBi0ClYEVBMCQqBsEBABKJupXryBMtiPZXvPQ8732Dlo+iPoj2V9J7D45zT9VzT4bTMi/Z+gpv/ygDHQT5r++Z+jW6oB5v92uoMQEAIFjIAIQAFPTjF2jQvMlaGkfUpN/0sxl+J3HZH/JAXc2dPEv35K059pftT0r4TojwcuAUn7FuOMq89CQAgUKwIiAMU6cwXUb0r68sF0Pqb5sYrfJxD4Ybofc/6TyP9nUF9jtc/p+G9GGd/HNlYZA/4YC6C2OAikJyYsOZCrBpixikDQBf55qqpdZUC5ABZnHnQXIVAoCIgAFMpMFHE/ICvvFnlW8PsYCz/9/qzsN0pNf0j+hgIVroxvBzT9d7WHrQ3yvo01XmP6n9riIRA/120T775tse4uajGbd/lyCz203QLrN0gJcPGmQXcSAgWDgAhAwUxF8XUkp+nPSP+BkRSC/aDp3zlh56HpH01kTf4s2cuc/vXI8d+0KgShn7CL/C++0RZ/j6PHj9rIWz+wCIsBJRNG9b/KJ552aYCBjo3mbWgs/kFqBEJACMwYARGAGUOlA29HgJr+E9E0Fnxq+kdcml//SBJFfhDpD3ZQX+XFwp/V9GfAHzX9axHpT3eA2uIjQAIwDALgqgGSAED/v/KJJ50UcJAEoHHZ4ndKdxQCQmDJEBABWDLoi/fGXNyZ48+yvVeux52y3yfQ9L+MSP8kTP4BZJPVVvls9TK/PbQmZBth+l9HTX8QArWlQ+BOArDSwo8/mbUAbNhsPhGApZsc3VkILAECIgBLAHqx33ISlfwY2e80/RHt39MXd8F/kzFEAlrGmfhZvpdlfNth+m+ipj8i/aXpv7QzHz1BF8APsy6ABCwAK1pBAPY4AhDcuBkWgOVL20HdXQgIgUVFQARgUeEu7psxoI+LPwV+6OfvvBy1o8jz70PAH1sYizwj/bno72qvNAb9UemPaX5qS49A9MSxGzEABheAr2WFhR/b42oBBDduMd8yEYClnyX1QAgsHgIiAIuHddHfaYSa/oj0Z5rfiQtRp+8/MpGEOyDtRHzo46emP5X9VuJ1TtNfAj+FMfVZC8CbFj12yNK0AJAAPPJElgBsfkgEoDCmSb0QAouGgAjAokFdvDfKafr3DsbtNCr5dUHat+tK3Kjp78HmnpH+3OlvbA3Z4xuzmv78LKAyvgU16c4C8H9zLoA49P9XWOUjj98kAMubCqq/6owQEAL5RUAEIL/4lsTVafI/eTFyQ9O/bxiR/pG0paH+E8Qiv645q+nPNL9mEIHqsDT9C3HiswTgTYvAApCJx83f3GIhEIDw9l0W3LLVfCIAhTht6pMQyBsCIgB5g7b4L0z53iFq+iPN7wh8/SzoQ4EfxgH4Uce3ttJjrdT0x8JPTf81KO7jZzEfVfMpyMmPn++x8b2/RTVACAElk+atb7AAgv+C6zvMv7bNFQYqyI6rU0JACOQFARGAvMBa/BfNavon7EBXxAX7XboWd5H/0XjG+fu5+FPTnyb/DQj2y2n6U9pX6r6FOf83pYAnkKyRtgp/wDw1Na4aoKeyCu/9hdlx9UoICIG8ICACkBdYi/OiWU3/bKQ/0/y4499PTf++rKZ/CpK/lPVlpP9qVPCjuM9jHWFrlaZ/0Uy4qgEWzVSpo0Ig7wiIAOQd4uK5QRoCP0z1c5r+p6HpjzS/qzD5M/qfnzOdjyZ/pvftbKt0vn9G+kvTv3jmWD0VAkJACOQQEAHIIVHGz9T0p4LfODT9KeV7Ggt/TtOfGQCM9K9GGd8WavrD7M9gPyr8NdVC8k+taBBIT7Ia4IClJ8bNUMGJJn9PVVXWBcCKgIFA0YxFHRUCQmD+CIgAzB/Dor9CfErT/xxM/TT5n7kSRXGfpE0g0j8FvwB3+dz1b1yJxX9lyOX41yLSX5r+xTX18fPnbOL9d1wQYCYRh/+/zgUABto3oCJgh4oBFdd0qrdCYN4IiADMG8LivUBO05+R/r1Tmv4HnKZ/HMV8zAIo2lOH4j1rlvtt69qQC/Zb2xS0Omn6F+Wkx04et5F//9esFHAs6or/hJACGN6xyxUEojKgmhAQAuWDgAhA+cz1HSPNyfoy2O9Q95SmP8R9Ik7T35zJf0dbyGn6r2uGrC9M/pUQ+GGqn1rxIRAFARj98Y+yBCAawY5/mYW278Bjt4V37YY0cGvxDUo9FgJCYM4IiADMGbriPdGV8UUuP838zPHvhLrfsfMR6x/Oafp7XVofNf0fXh92fv9lXPyl6V+8k46ekwCMgAC4csCOADRacCsIACwA4V2PuOJART1AdV4ICIFZISACMCu4SuNglvFlMR9K+p68FDHm+I/gM8YCULefKX6POU3/kLWipC/L+NLfL03/4p7/LAF4y9UCyERoASAB2J61AOwWASju2VXvhcDsERABmD1mRXsGI/pHkdJ3ecrfTwJw9mrMhlHQh4t7tdP097tgP6fpD7M/Nf1Vxrdop/yWjsdOHbfhH4MAHD1sWQLQYMGHtjkCUPnwo+ZDeWA1ISAEygcBEYDymWtn8j9+AZr+MPn3IOKfmv4T0RQ0/c3t8Nuw4O/ZVOV8/izuU4NIfy+lfeXyL4lfSfTUCRv9j7eyMQCRSSf9SwIQRgxACATA37qyJMapQQgBITAzBEQAZoZTUR+V0/Rnmt/hnqymfx/8/ZPQ+mdAHyP9V0DgZwuU/Z4AAaCmvw+rPvP/1UoHARKAERCArAVgigCgCJALAnzkMRGA0plqjUQIzAgBEYAZwVS8B1H6tXcwYZ9A0//Upahdhr+fZXyjcAegno9L6VvfclPTv7HWb5UBj9Pzl6Z/8c773XoeAwEY/sn/zRIAiAJ56+otuBkEgEGAqAooC8DdUNNnQqB0ERABKMG5paY/S/UyzY+a/l1I8/sY0r498PePQe2POf6U722sYY4/NP2h7PfIBmj6wwrAYj5qpYlA/AKEgH631+I9Zy0TjToFQP/adRZo77Dgpi3mW7a8NAeuUQkBIXBXBEQA7gpLcX9IgR+m+l0YiNvHUPbrxM6fJn8GACZSZlXU9EcBH1bx27Eu7DT966XpX9yTPoPeOynga5ACHp+SAvb5rKKy0hEBL6oCVgSCM7iKDhECQqBUEBABKJWZxDhymv5jWOj7RxIuv5+a/iQCzADwes1qQl5rYUGfKU3/LauDtlya/iX0K7j/UFQN8P746FshUE4IiACU0Gwzj38M+v0M9vtkStP/GsR+xqNp4z/8DTU+l+K3sTXknmkFYKS/NP1L6EegoQgBISAEZoiACMAMgSrkw1jJjzt8avpfRsAfq/nlNP1Z4jfo9yDYz+Oi+7etDcP0H3L6/rWI/lcrHwTSk5OWun7NVQPMpJJGk5AnRBdAlXlr66wiKBdA+fwaNFIhYCYCUAK/ggns8Adg8j97Ne7S/Hr6spH+kRgc/mgtDT7b2Vbp8vuZ60+TfxhxANL0L4HJn8UQEhcv2MTv30cQYJeRDHjCYfOtXO2CAEPQA/A1Nc/iajpUCAiBYkdABKCIZzCn6U8N/3NY9LnzP3YxW8qXw6oMVCDS3wctf2r6V2Y1/fGei79a+SEQO33KRn/6Y5cGmBobdTv/wPqNLg2was/T5l+9pvxA0YiFQBkjIAJQxJNPTX/6+89A0pc5/tT0H51MWxwuAR8EflZDx5+a/ptWBW1lY8Bp+rPErzT9i3jS59F1RwD+6z9AAA6ZIwCVVRZYvwFCQLus6slnRADmga1OFQLFiIAIQBHOWiyRthFq+l9jpH/UEQBK+5IQOE3/sMea66jpH7Kspn/AVfKTpn8RTvYCdvkmATgMAjBiHhIAaAA4AvAUCcDaBbybLiUEhEChIyACUOgzdJf+McXvOMr35jT9+xHpzzgApgGGYPZfBz//k07TP2TU9GeRH2n63wXIMvvIEYCf/SRrARgFAQhXggCsnyIAz5p/jQhAmf0kNNwyR0AEoIh+ANT0H4SyH/39h3om7SwU/rj4R+MZV7HPafo3+mwLlP2e2Fhtq5v8zhWgYj5FNMl57OoNAnAMFoAREoCwBdraswTgaRKAdXm8uy4tBIRAoSEgAlBoM3KP/jCPnyl+zO93mv4o6cu0P6b/0d/fUOV1QX6Pbbw12I/CvlL3vQeoZfZx7EynjdIC4AjAMFIAQxZYBwKAWgBVTz8nAlBmvwcNVwiIABTwb+B2TX8G+318emJK0z9r8qemP9P6WMFvM4L9Hu6odJr+BTwsdW2JEHAE4Of/mc0CGBkyT5AEoA0EYLdVPSMCsETTotsKgSVDQARgyaB/8I2na/rvQzGf04j0vzql6U/xnyrI+q5CpH8HhH12rAvZ2uaAswSEQArUhMDtCDgC8IufZmMAhrMEwL+WBAAWgGeetwAKA6kJASFQPgiIABTgXKdRrS+Bkn2U9WWOf+flmOU0/Sn364OAXzUW/xXQ9N+wMmibEO3P3f8yafoX4GwWTpcSly7axL7fZ4WAUBCowo8YkZYVLhMgDBLga15ROJ1VT4SAEMg7AiIAeYd49jdgmh/L9lLRj5K+XTD9D4xmI/0ZC0BxH6b4bcTizwfL+FLTnzn+akLgXgikI5OWdFLAE2ZJSAF7PM4N4KmGFHBdPaSAQ/c6VZ8LASFQggiIABTQpOY0/QfHk07Uh2l+n56dtF4E/+U0/Vm2dy38/dT070A5X4r9SNO/gCaxwLuiaoAFPkHqnhBYRAREABYR7Afdirn8fTD5M73v8LmInYe4zyAi/aNI/+Penib/XevDUPaDvx8kYNmUrK80/R+ErL6/FwIiBPdCRp8LgdJHQAQgj3NMYZ4UgvW4s0/ijQf5eCy9y7S96Y1+fS7+9Pd3T2n6n7gYMZbyZQ4fNf252He0BuwRRPmvXxG0hmofRH8U7DcdR72+PwLpSMRSQ9ctDf9/JpnAwRVWEQiacwHUNyAtMHz/C+hbISAESgoBEYA8Tqcr1oOFfTyacgs8pXhb6v2I3r914WY+fzd2+/T153L8RyH1m0AxP5KFNTDzU9J38+ogrABZTX9eS5r+eZy8Erx0oveSTe7/yOLdZy0NJUDzeM23fHk2CHD3o+Zb0VqCo9aQhIAQuBcCIgD3Qmaen2Pzj8I8KefL7x9OOp3+SlTho9++pR4V+bB7Z5rfyETaLkHU5ySq+HXB9M/iPtT55+LOwL5mSPnS5J/T9Gclv9stCPPsqk4vEwTiZ8/Y2K9+bpFjKAaEYEDz+szfusqYAVD1wktQBVxfJkhomEJACBABEYA8/A64+NO3egnFevadHnc7e+7y66DWt7Ot0kXuM38/EsvY0fPI70ewH4v5DFDTP5bGueZK9rYhr3/P5mqk+QWtCSl+1SjyQ2IgZb88TFoZXDIGAjD+axCAo5ACvj7gLAAkANQBqH7xcyIAZfAb0BCFwHQERACmo7FAr+nTp9mfyn3vHRtzz5NwBbQgiO/JzVXOh09rwHWk9h3snrTuq9nFPwpZ3wBM+yQKrY1+5PZD0x9FfdYs92vhX6C5KefLkACM/foXWSngayQAHvOvWDlFAD7vCgOVMz4auxAoNwREAPIw4yzLS1P+CZj1mcffN5Rw1fg6ELz32Z012Ml74euPYOGPI8UvbsNTmv706zcgzY9Bfo9uqHTugkYE+5EsMA3g1tDBPHRclyxpBOJnu2zsN7/IWgCu9U8RgFZXDKj6syQAHSU9fg1OCAiBWxEQAbgVj3m9Y9Q/I/4vw6d/EPn7JADc3dMi0Izgvzak7m1ZHXLvD+D78/0xFxxIkz8XeUb6M71vE4L9Hl5f6dL+5tUhnSwEpiEQ7yYB+CUIAGIABkgAKszfAgJAF8BnXxYBmIaVXgqBckBABGABZ9mZ/qHgd6Y3anuPjttpPFPOlyl7O9vCzofP1D6q+rGM7ziOJWGgRYCCPhug6b+Nmv4gAfVwAyjNbwEnR5dC9D8IwH//0hUDSg70ARESgBUgALut+iURAP1EhEC5ISACsEAzzl08o/cvDsTt+IWIfXRqwin40azfNBXJz2M6L0eR7590Cz81/RnpT4EfSvpS038jNf1hCVATAguNQJYA/MrFACT7SQBsigDQAvCKBdbLBbDQmOt6QqCQERABWIDZ4cLOqP+LiPr/6NS4nbgQtQvX4s7UnxXsqXCR/QzyG5lIQtkvY2kcz4WegX5c/JkeKE3/BZgMXeKeCJAAjL8NAoAsgMQNAtCCGABaAEQA7gmcvhACJYqACMACTCxN/yzecwa7+73Hxt3zGKL+mbLHwj1M22NgICV9WemPRXvqKj1u58+Av1XLAra81usIAY+nRoBS/RZgYnSJWxBIXLlskQP7XTXA1NCQ+87b0Oh2/uFHHneaALecoDdCQAiUNAIiAAswvczxZx7/CZj+Wbzn8vWEM/FXYBXnYs/ofZIELv5c2Cnu89DakHMNGKwHTjEQ+f/8/PGNVSAEfhynfP8FmBpdYhoCWSngQUtPQAo4Ecc3lAIOmKcK1QBBBCQFPA0svRQCZYCACMA8JjkX9X8J5n4u/DT9kwhwt59r03fyVPAL+T0uI4C6/lWI/KflgASCmgDM/f/c7loo/wXdcVL8y6Go54VCQMV/FgpJXUcIFD8CIgDzmENn+kfgH6P9c1H/LOrDz6c3kgAWAmKq33Io+rEgUALR//EkjkVcAI/n8xpE/7+wo9q2rgnbMhzn8v+nX0ivhcACIyBCsMCA6nJCoIgQEAGY42Qx8I9R/+f7b0b9U9Ofn9/ephOAbIR/xq6PJS2GRZ9ZAkz342K/DgQgJwDE40QAbkdS7+eDQCYatdTwkHMBpOMxQySqVfj9WRdA4zLzhCvnc3mdKwSEQJEhIAIwhwnjIs8ofkb9f4io/+Pno67oDwnBvRpJAIMCg1jw2bjrpyVgOfz+NP1z8Wf+Px/MHOB3PF5NCCwUAsmrVyxy+FOnB5C8ds0yaRSdqql1QYCVjz9l/lWrF+pWuo4QEAJFgIAIwBwmiTt3+u5zpn8K/9zN9D/90iQAuRiAcKDC+f8bsMunBgCD/tah8A+DAGsrvVj8by0XPP06ei0E5opA/FyPTex92ykBJnovQ7YyaV7s/KkEWPPKH1pww6a5XlrnCQEhUIQIiADMYdIGEbR3FqV7T1yM2CEE//UOZqP+GRR4t8bFn4+c6M+qqR0/iwNR+78Giz4DArnr93s9rNGiJgQWHAESgHEQgOgx6ABcvgQCgBoVJADbQQD+xxdEABYccV1QCBQ2AiIAs5ifFFZ4puzR9M+o/5PQ+qee//Sof16Ohnsu+PTvM6efvvyqUFbrfyV2+6uR909TPwMC+R2PUxMC+UYgfp4E4LdZIaDLF7MEoGHKAiACkG/4dX0hUHAIiADMYkoo5DM0noScb8x+d2LcWQEmkL9PUjC90XXvRcpfHXb2NO+vXo4FHyV9WRCIJn5q/3PhZzwAj5Orfzp6ep0vBEgAJt57x1UDTJAAQAuA+f/OAvA/vygLQL6A13WFQIEiIAIwg4mhgA/T9hi534PqfjT9HzwbsSso88uWNfFD9AcLutvtY3GvCSPlDz597vYdAWiiuX92wX1p3DiRSFgqlYKIUNrJDc+guyAViCMIBt3zTI7XMeWBQPz8OZt4/52sBeDSBcvEpwgAYwBEAMrjR6BRCoFpCIgATAPjXi9zQX/0+3/UOYFqfzEbBBmIwCLA5sEW3o+dfCP8+czlX4PdPhf9pjq/IwI0/5MYkCBQD4CEYSYtFovZ6OioTU5O3iACMzmvsrLSli1bZuFwGPea4c1mcmEdU9QIxC+QALwLAnDI4henCEB9gwsCrCUB2Li5qMenzgsBITA7BEQAZoAXI/4Z6Md0vw9g+j+Pin8UUOGiz8WdJn2a+2niX4edPhd/6vvXgxD4QA7mGtTX19dnR44csd7e3lkRgJaWFtu1a5e1traaH3netAioCQFHAH63N2sBuHjO0iCYXkcAdpsIgH4fQqD8EBABmMGcD4wkXYnf45D6PXYuYv0jCRfoxwj+tpagezCNj2V/q0PZiP4wg/tAELLugRnc5C6HfPrpp/atb33LDhw44AhHTrXtLofe8tH27dvt9ddft0cffdTq6uqcO+CWA/SmLBFIXDxvEx9kCQDdAelY1Lx1UxaAP/iSLABl+avQoMsZARGA+8y+i/qH7//yVNR/F1wA16DZn4CEL6P7mbff0RoCAYDZH6b/+irvrEz897m1++rQoUP23e9+1/h8++JP037ORTA8PGxDqO4WhdKbB+aGp556yv76r//ann/+eautrRUBeBDQZfJ9EiWAmQIY7zlrFAVKIwjQU1XjhICq9jxj/tVrygQJDVMICAEiIAJwn99BNJG2ERT2OdeHYj/dEef3r0VwX2ON11qw+C+Hj5/lexnZ79L5pnb897nkrL7iot7T0+MWdxKAHAng4s+F/hrU3I4dO2aHDx+2Tz75xOgyCKC627PPPmt/8zd/457pAuCxakIggx1/amQkWw0QZDGDwNIKnw8koNq8iBmRFLB+I0KgvBAQAbjPfDPI7/oY/P8o78sqf5TvbanPLv65lD6q9uWral9u0b9bBgBJwJkzZ+znP/+5vffee44A0AKwceNGe+GFF+xrX/ua7dix4z6j01dCQAgIASFQzgiIANxn9hn9Pwp9fxKBFAL+ma8fgowvF/0QVPu48FOvn37+fLXcrj/3zPuQECQh47pv3z77+7//e3v//fedlWDTpk329a9/3RGA9vZ2Z97JV7903dJAIPe7UrZIacynRiEEZoOACMB90ErC/x+B0A8bg/rytdO/Txfu+tXg4KDb/b/77rv2L//yL3bu3DlbuXKlPffcc/bNb37THnnkEfPRtCvT/13xK9cPM4j6T43SBTBh6eikQWACrBZxK9XV5lvWZB6kj6oJASFQPgiIANxnrln1j4GAbPne6d+nG3d8dfDgQfvOd75jJAAXLlywFStW2Je//GUX9Ld79273njs67erugK6sP0gO9Fv05PFsEGDvJUtHIm7RD7RvsKqnnzX/mrVljY8GLwTKDQERgCKa8Qns3Bjot3fvXmf6ZwAgJ3DPnj3O9M9nvg+FQkU0KnV1sRCg/O/Evg+dDkD87BkXDOitqXFSwLVffNWCmx9arK7oPkJACBQAAiIABTAJM+1Cd3e3vf32244A0O/POIDHHnvMRfu//PLLxhgACf/MFM3yO44EYPLjLAGI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", @@ -4740,7 +4287,9 @@ "mimeType": "image/png", "isAnimated": false }, - "meta": {} + "meta": {}, + "id": "asset:8475689", + "typeName": "asset" } ] } \ No newline at end of file diff --git a/docs/test.tldr b/docs/test.tldr deleted file mode 100644 index 4e4fad5..0000000 --- a/docs/test.tldr +++ /dev/null @@ -1,383 +0,0 @@ -{ - "tldrawFileFormatVersion": 1, - "schema": { - "schemaVersion": 1, - "storeVersion": 4, - "recordVersions": { - "asset": { - "version": 1, - "subTypeKey": "type", - "subTypeVersions": { - "image": 2, - "video": 2, - "bookmark": 0 - } - }, - "camera": { - "version": 1 - }, - "document": { - "version": 2 - }, - "instance": { - "version": 17 - }, - "instance_page_state": { - "version": 3 - }, - "page": { - "version": 1 - }, - "shape": { - "version": 3, - "subTypeKey": "type", - "subTypeVersions": { - "group": 0, - "embed": 4, - "bookmark": 1, - "image": 2, - "text": 1, - "draw": 1, - "geo": 7, - "line": 0, - "note": 4, - "frame": 0, - "arrow": 1, - "highlight": 0, - "video": 1 - } - }, - "instance_presence": { - "version": 4 - }, - "pointer": { - "version": 1 - } - } - }, - "records": [ - { - "gridSize": 10, - "name": "", - "meta": {}, - "id": "document:document", - "typeName": "document" - }, - { - "id": "pointer:pointer", - "typeName": "pointer", - "x": 1323.078125, - "y": 743.875, - "lastActivityTimestamp": 1694612082026, - "meta": {} - }, - { - "meta": {}, - "id": "page:BOCl88s28IpD2VrJVSgCf", - "name": "Page 1", - "index": "a1", - "typeName": "page" - }, - { - "x": 0, - "y": 0, - "z": 1, - "meta": {}, - "id": "camera:page:BOCl88s28IpD2VrJVSgCf", - "typeName": "camera" - }, - { - "editingId": null, - "croppingId": null, - "selectedIds": [], - "hoveredId": null, - "erasingIds": [], - "hintingIds": [], - "focusLayerId": null, - "meta": {}, - "id": "instance_page_state:page:BOCl88s28IpD2VrJVSgCf", - "pageId": "page:BOCl88s28IpD2VrJVSgCf", - "typeName": "instance_page_state" - }, - { - "followingUserId": null, - "opacityForNextShape": 1, - "stylesForNextShape": { - "tldraw:geo": "ellipse", - "tldraw:fill": "semi" - }, - "brush": null, - "scribble": null, - "cursor": { - "type": "default", - "color": "black", - "rotation": 0 - }, - "isFocusMode": false, - "exportBackground": true, - "isDebugMode": false, - "isToolLocked": false, - "screenBounds": { - "x": 0, - "y": 0, - "w": 2265, - "h": 1308 - }, - "zoomBrush": null, - "isGridMode": false, - "isPenMode": false, - "chatMessage": "", - "isChatting": false, - "highlightedUserIds": [], - "meta": {}, - "id": "instance:instance", - "currentPageId": "page:BOCl88s28IpD2VrJVSgCf", - "typeName": "instance" - }, - { - "x": 650.796875, - "y": 386.6328125, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "id": "shape:Z96x88IKDjkhGxn0NXPDW", - "type": "geo", - "props": { - "w": 184.109375, - "h": 146.57421875, - "geo": "rectangle", - "color": "black", - "labelColor": "black", - "fill": "semi", - "dash": "draw", - "size": "m", - "font": "draw", - "text": "Start", - "align": "middle", - "verticalAlign": "middle", - "growY": 0, - "url": "" - }, - "parentId": "page:BOCl88s28IpD2VrJVSgCf", - "index": "a1", - "typeName": "shape" - }, - { - "x": 995.734375, - "y": 352.6640625, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "id": "shape:of1Kr9dzBYlOrolSGLjNN", - "type": "geo", - "props": { - "w": 278.625, - "h": 240.74609375, - "geo": "rectangle", - "color": "black", - "labelColor": "black", - "fill": "semi", - "dash": "draw", - "size": "m", - "font": "draw", - "text": "Middle", - "align": "middle", - "verticalAlign": "middle", - "growY": 0, - "url": "" - }, - "parentId": "page:BOCl88s28IpD2VrJVSgCf", - "index": "a2", - "typeName": "shape" - }, - { - "x": 744.515625, - "y": 552.5625, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "id": "shape:QjsyMlTJy279E7lRS01sa", - "type": "arrow", - "parentId": "page:BOCl88s28IpD2VrJVSgCf", - "index": "a3", - "props": { - "dash": "draw", - "size": "m", - "fill": "none", - "color": "black", - "labelColor": "black", - "bend": 0, - "start": { - "type": "binding", - "boundShapeId": "shape:Z96x88IKDjkhGxn0NXPDW", - "normalizedAnchor": { - "x": 0.5, - "y": 0.5 - }, - "isExact": false - }, - "end": { - "type": "binding", - "boundShapeId": "shape:of1Kr9dzBYlOrolSGLjNN", - "normalizedAnchor": { - "x": 0.5, - "y": 0.5 - }, - "isExact": false - }, - "arrowheadStart": "none", - "arrowheadEnd": "arrow", - "text": "", - "font": "draw" - }, - "typeName": "shape" - }, - { - "x": 1468.46875, - "y": 437.19921875, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "id": "shape:cXBMkFoK7U62Dbcsj9fw7", - "type": "geo", - "props": { - "w": 278.625, - "h": 240.74609375, - "geo": "rectangle", - "color": "black", - "labelColor": "black", - "fill": "semi", - "dash": "draw", - "size": "m", - "font": "draw", - "text": "End", - "align": "middle", - "verticalAlign": "middle", - "growY": 0, - "url": "" - }, - "parentId": "page:BOCl88s28IpD2VrJVSgCf", - "index": "a2V", - "typeName": "shape" - }, - { - "x": 1167.6328125, - "y": 420.6953125, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "id": "shape:9O1KB_ryC5dL9ggheEi9g", - "type": "arrow", - "parentId": "page:BOCl88s28IpD2VrJVSgCf", - "index": "a2l", - "props": { - "dash": "draw", - "size": "m", - "fill": "semi", - "color": "black", - "labelColor": "black", - "bend": 0, - "start": { - "type": "binding", - "boundShapeId": "shape:of1Kr9dzBYlOrolSGLjNN", - "normalizedAnchor": { - "x": 0.5, - "y": 0.5 - }, - "isExact": false - }, - "end": { - "type": "binding", - "boundShapeId": "shape:cXBMkFoK7U62Dbcsj9fw7", - "normalizedAnchor": { - "x": 0.5, - "y": 0.5 - }, - "isExact": false - }, - "arrowheadStart": "none", - "arrowheadEnd": "arrow", - "text": "", - "font": "draw" - }, - "typeName": "shape" - }, - { - "x": 994.8359375, - "y": 769.7578125, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "id": "shape:xc8hARLSRwGfnJ3yUzY91", - "type": "geo", - "props": { - "w": 249, - "h": 248.8671875, - "geo": "ellipse", - "color": "black", - "labelColor": "black", - "fill": "semi", - "dash": "draw", - "size": "m", - "font": "draw", - "text": "Off the beaten path", - "align": "middle", - "verticalAlign": "middle", - "growY": 0, - "url": "" - }, - "parentId": "page:BOCl88s28IpD2VrJVSgCf", - "index": "a4", - "typeName": "shape" - }, - { - "x": 1124.296875, - "y": 522.0078125, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "id": "shape:VmU06a1JHpgle52-BBMLR", - "type": "arrow", - "parentId": "page:BOCl88s28IpD2VrJVSgCf", - "index": "a5", - "props": { - "dash": "draw", - "size": "m", - "fill": "semi", - "color": "black", - "labelColor": "black", - "bend": 0, - "start": { - "type": "binding", - "boundShapeId": "shape:of1Kr9dzBYlOrolSGLjNN", - "normalizedAnchor": { - "x": 0.5, - "y": 0.5 - }, - "isExact": false - }, - "end": { - "type": "binding", - "boundShapeId": "shape:xc8hARLSRwGfnJ3yUzY91", - "normalizedAnchor": { - "x": 0.5, - "y": 0.5 - }, - "isExact": false - }, - "arrowheadStart": "none", - "arrowheadEnd": "arrow", - "text": "", - "font": "draw" - }, - "typeName": "shape" - } - ] -} \ No newline at end of file diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 1ae2c07..f47923b 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -12,6 +12,11 @@ import { CylinderShape } from "../shapes/Shape"; import { Scene } from "./Scene"; import { Viewport } from "./Viewport"; +enum CylinderEnds { + Top = 0, + Bottom = 1, +} + export function renderCylinder( _scene: Scene, svg: SVGElement, diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index f23e834..c7a756b 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -60,7 +60,7 @@ export default function () { lightSphere.position = Vector3(1, 1, -1); - const { viewport, camera, updateCamera } = getCamera("front"); + const { viewport, camera, updateCamera } = getCamera("isometric"); const onPointerEvent = (event: PointerEvent) => { // return; From bd18416f036a3e85ada95cd6c5d3f65da05dc973 Mon Sep 17 00:00:00 2001 From: Francois Date: Wed, 20 Sep 2023 16:00:18 -0400 Subject: [PATCH 03/20] More progress on cylinders. Adding some debugging visualization --- src/renderer/renderCylinder.ts | 59 ++++++++++++++++++++++++++---- workbench/scenes/SingleCylinder.ts | 26 ++++++++----- 2 files changed, 67 insertions(+), 18 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index f47923b..63c6ade 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -4,7 +4,7 @@ // https://observablehq.com/d/011f054fc7eaf966 import { projectToScreenCoordinate } from "../cameras/Camera"; -import { ColorToCSS } from "../colors/Color"; +import { Color, ColorToCSS } from "../colors/Color"; import { applyLighting } from "../lighting/LightingModel"; import { Matrix4x4 } from "../math/Matrix4x4"; import { Vector3 } from "../math/Vector3"; @@ -24,7 +24,7 @@ export function renderCylinder( cylinder: CylinderShape, viewport: Viewport, worldTransform: Matrix4x4, - _cameraZoom: number, + cameraZoom: number, cameraDirection: Vector3, _inverseCameraMatrix: Matrix4x4, inverseAndProjectionMatrix: Matrix4x4 @@ -47,10 +47,51 @@ export function renderCylinder( const yAxis = Vector3(0, 1, 0); worldTransform.extractBasis(Vector3(0, 0, 0), yAxis, Vector3(0, 0, 0)); + const addCylinderEnd = ( + { x, y }: Vector3, + radius: number, + dotProduct: number, + fill: Color + ) => { + const dotProductAbsolute = Math.abs(dotProduct); + // Create a 'circle' element + const circle = document.createElementNS( + "http://www.w3.org/2000/svg", + "ellipse" + ); + + circle.id = "sphere"; + circle.setAttribute("cx", x.toString()); + circle.setAttribute("cy", y.toString()); + + // TODO: Factor in camera projection matrix, this currectly + // ignores all zoom factors. Can we even handle skew with sphere?! + // I don't think we can. + circle.setAttribute("rx", radius.toString()); + circle.setAttribute("ry", (radius * dotProductAbsolute).toString()); + + circle.setAttribute("fill", ColorToCSS(fill)); + + svg.appendChild(circle); + }; + + const cylinderScale = worldTransform.getScale().x; + const cylinderScaleFactor = cylinderScale * cameraZoom; + const Radius = cylinder.radius * cylinderScaleFactor; + // Top === -1 - // Bottom === 1 // Front === 0 - console.log(yAxis.dotProduct(cameraDirection)); + // Bottom === 1 + const dotProduct = yAxis.dotProduct(cameraDirection); + console.log(dotProduct); + const isTopVisible = yAxis.dotProduct(cameraDirection) > 0; + + addCylinderEnd( + isTopVisible ? points[CylinderEnds.Top] : points[CylinderEnds.Bottom], + cylinder.radius, + dotProduct, + isTopVisible ? Color(255, 0, 0) : Color(0, 0, 255) + ); // Scenarios we can view the cylinder from: // 1. From the top/bottom (can't see the tube) @@ -59,8 +100,7 @@ export function renderCylinder( // Are we viewing the cylinder from the top or bottom? - points.forEach(({ x, y }) => { - // Create a 'circle' element + points.forEach(({ x, y }, index) => { const circle = document.createElementNS( "http://www.w3.org/2000/svg", "circle" @@ -73,9 +113,12 @@ export function renderCylinder( // TODO: Factor in camera projection matrix, this currectly // ignores all zoom factors. Can we even handle skew with sphere?! // I don't think we can. - circle.setAttribute("r", "10"); + circle.setAttribute("r", (5).toString()); - circle.setAttribute("fill", ColorToCSS(cylinder.fill)); + circle.setAttribute( + "fill", + index === CylinderEnds.Top ? "rgb(128,0,0)" : "rgb(0,0,128)" + ); svg.appendChild(circle); }); diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index c7a756b..e550b47 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -20,7 +20,7 @@ import { Axii } from "../Axii"; import { type } from "os"; export default function () { - const referenceRadius = 75; + const referenceRadius = 50; const lightSpeed = 0.3; const lightDistance = 100; @@ -33,6 +33,16 @@ export default function () { }); const position = Vector3(0, referenceRadius / 2, 0); + const cylinder = Cylinder({ + id: "reference", + position, + radius: referenceRadius, + height: referenceRadius * 4, + // radius: referenceRadius, + fill: Color(255, 0, 0), + stroke: Color(0, 0, 0), + strokeWidth: 0, + }); const scene: Scene = { ...getLighting("reference"), @@ -44,14 +54,7 @@ export default function () { // rotation: Vector3(45, 0, 0), // scale: 3, // children: [ - Cylinder({ - id: "reference", - position, - radius: referenceRadius, - fill: Color(255, 0, 0), - stroke: Color(0, 0, 0), - strokeWidth: 0, - }), + cylinder, // ], // }), lightSphere, @@ -60,7 +63,7 @@ export default function () { lightSphere.position = Vector3(1, 1, -1); - const { viewport, camera, updateCamera } = getCamera("isometric"); + const { viewport, camera, updateCamera } = getCamera("top"); const onPointerEvent = (event: PointerEvent) => { // return; @@ -127,8 +130,11 @@ export default function () { const cameraSpeed = 0.1; // const cameraSpeed = 0.0; updateCamera(now * cameraSpeed * 360 + 45, 20); + // updateCamera(45, 20); + cylinder.rotation.x = now * 90; + // lightSphere.position.x = // Math.sin(now * Math.PI * 2 * lightSpeed) * lightDistance; // lightSphere.position.y = 0; From ba0d0ce12521718c64def5a4ff3cb7ec5b20c543 Mon Sep 17 00:00:00 2001 From: Francois Date: Thu, 21 Sep 2023 08:48:08 -0400 Subject: [PATCH 04/20] Added more debug logging for cylinder rendering --- src/renderer/renderCylinder.ts | 25 +++++++++++++++++++------ workbench/scenes/SingleCylinder.ts | 9 ++++++--- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 63c6ade..7d6b8ff 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -26,7 +26,7 @@ export function renderCylinder( worldTransform: Matrix4x4, cameraZoom: number, cameraDirection: Vector3, - _inverseCameraMatrix: Matrix4x4, + inverseCameraMatrix: Matrix4x4, inverseAndProjectionMatrix: Matrix4x4 ) { const points: Vector3[] = [ @@ -44,8 +44,14 @@ export function renderCylinder( ); }); - const yAxis = Vector3(0, 1, 0); - worldTransform.extractBasis(Vector3(0, 0, 0), yAxis, Vector3(0, 0, 0)); + const yAxisWorldSpace = Vector3(0, 0, 0); + worldTransform.extractBasis( + Vector3(0, 0, 0), + yAxisWorldSpace, + Vector3(0, 0, 0) + ); + const yAxisCameraSpace = yAxisWorldSpace.clone(); + inverseCameraMatrix.applyToVector3(yAxisCameraSpace); const addCylinderEnd = ( { x, y }: Vector3, @@ -82,9 +88,16 @@ export function renderCylinder( // Top === -1 // Front === 0 // Bottom === 1 - const dotProduct = yAxis.dotProduct(cameraDirection); - console.log(dotProduct); - const isTopVisible = yAxis.dotProduct(cameraDirection) > 0; + const dotProduct = yAxisWorldSpace.dotProduct( + cameraDirection.clone().multiply(-1) + ); + console.log( + `dotProduct: ${dotProduct.toFixed(3)} + yAxisCameraSpace: ${yAxisCameraSpace.x.toFixed( + 2 + )}, ${yAxisCameraSpace.y.toFixed(2)}, ${yAxisCameraSpace.z.toFixed(2)}` + ); + const isTopVisible = dotProduct > 0; addCylinderEnd( isTopVisible ? points[CylinderEnds.Top] : points[CylinderEnds.Bottom], diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index e550b47..e3636b6 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -32,12 +32,13 @@ export default function () { strokeWidth: 10, }); - const position = Vector3(0, referenceRadius / 2, 0); + const height = referenceRadius * 4; + const position = Vector3(0, height / 2, 0); const cylinder = Cylinder({ id: "reference", position, radius: referenceRadius, - height: referenceRadius * 4, + height, // radius: referenceRadius, fill: Color(255, 0, 0), stroke: Color(0, 0, 0), @@ -133,7 +134,9 @@ export default function () { // updateCamera(45, 20); - cylinder.rotation.x = now * 90; + // cylinder.rotation.x = now * 90; + cylinder.rotation.x = 0; + cylinder.rotation.z = 0; // lightSphere.position.x = // Math.sin(now * Math.PI * 2 * lightSpeed) * lightDistance; From a193dafe4865164c8bfc36071030de0f2d118cc3 Mon Sep 17 00:00:00 2001 From: Francois Date: Thu, 21 Sep 2023 08:58:39 -0400 Subject: [PATCH 05/20] ... --- docs/cylinders.tldr | 281 +++++++++++++++++++++++++++++++++----------- 1 file changed, 213 insertions(+), 68 deletions(-) diff --git a/docs/cylinders.tldr b/docs/cylinders.tldr index d67b319..ecb930f 100644 --- a/docs/cylinders.tldr +++ b/docs/cylinders.tldr @@ -73,9 +73,9 @@ { "id": "pointer:pointer", "typeName": "pointer", - "x": 773.1827019043085, - "y": -2307.7631842089286, - "lastActivityTimestamp": 1695235993865, + "x": 3300.3676672089873, + "y": -440.83875562093954, + "lastActivityTimestamp": 1695301096298, "meta": {} }, { @@ -85,8 +85,9 @@ "tldraw:geo": "ellipse", "tldraw:fill": "solid", "tldraw:dash": "draw", - "tldraw:color": "grey", - "tldraw:size": "xl" + "tldraw:color": "red", + "tldraw:size": "xl", + "tldraw:font": "sans" }, "brush": null, "scribble": null, @@ -102,7 +103,7 @@ "screenBounds": { "x": 0, "y": 0, - "w": 1720, + "w": 653.3333129882812, "h": 1065 }, "zoomBrush": null, @@ -130,16 +131,16 @@ "typeName": "instance_page_state" }, { - "x": 3296.1532355956915, - "y": 4784.585999150335, - "z": 0.1, + "x": -1255.7672860927873, + "y": 2041.450273116584, + "z": 0.1590253146762286, "meta": {}, "id": "camera:page:uEZU1HSz7SqZ2Uxqq6Zuo", "typeName": "camera" }, { - "x": 3858.5470331978095, - "y": -1372.462245270935, + "x": 6181.257219304578, + "y": -1673.0204261600752, "rotation": 0, "isLocked": false, "opacity": 1, @@ -160,29 +161,6 @@ "id": "shape:7RolEC3m4rJk4jn5-CAE4", "typeName": "shape" }, - { - "x": 2366.5432332143587, - "y": -332.016114953992, - "rotation": 0, - "isLocked": false, - "opacity": 1, - "meta": {}, - "type": "text", - "props": { - "color": "black", - "size": "m", - "w": 25.1015625, - "text": "-X", - "font": "sans", - "align": "middle", - "autoSize": true, - "scale": 1.2830224378840631 - }, - "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", - "index": "aI", - "id": "shape:tu0K2uUZxn5A2oxnAuC_f", - "typeName": "shape" - }, { "x": 87.48047865185384, "y": -1358.852479615269, @@ -207,8 +185,8 @@ "typeName": "shape" }, { - "x": 7591.861850225016, - "y": -42.01651732141181, + "x": 3135.3461131690756, + "y": 877.1664221652654, "rotation": 0, "isLocked": false, "opacity": 1, @@ -249,8 +227,8 @@ "typeName": "shape" }, { - "x": 2980.7525610453717, - "y": -550.3093653822234, + "x": 6767.541785702926, + "y": -831.4130302999579, "rotation": 0, "isLocked": false, "opacity": 1, @@ -278,8 +256,8 @@ "typeName": "shape" }, { - "x": 3690.8819292540693, - "y": -331.73819635991754, + "x": 7477.671153911623, + "y": -612.841861277652, "rotation": 0, "isLocked": false, "opacity": 1, @@ -415,8 +393,8 @@ "typeName": "shape" }, { - "x": 5884.552384773063, - "y": 490.1435920196451, + "x": 6345.161887298109, + "y": 274.58703131214236, "rotation": 3.124139361069851, "isLocked": false, "opacity": 1, @@ -444,8 +422,8 @@ "typeName": "shape" }, { - "x": 5887.550581560161, - "y": 648.2281581489623, + "x": 6348.160084085207, + "y": 432.67159744145954, "rotation": 3.124139361069851, "isLocked": false, "opacity": 1, @@ -473,8 +451,8 @@ "typeName": "shape" }, { - "x": 5872.692541680559, - "y": -79.29195087061487, + "x": 6333.302044205605, + "y": -294.8485115781176, "rotation": 3.124139361069851, "isLocked": false, "opacity": 1, @@ -494,8 +472,8 @@ "typeName": "shape" }, { - "x": 5868.743508996007, - "y": -406.47258174927737, + "x": 6329.353011521053, + "y": -622.0291424567802, "rotation": 3.124139361069851, "isLocked": false, "opacity": 1, @@ -523,8 +501,8 @@ "typeName": "shape" }, { - "x": 2982.2895389886444, - "y": -782.2091382395772, + "x": 6775.411857360511, + "y": -1180.8589049499938, "rotation": 0, "isLocked": false, "opacity": 1, @@ -546,8 +524,8 @@ "typeName": "shape" }, { - "x": 3722.1463530613637, - "y": -797.32841073072, + "x": 7386.153369477026, + "y": -1235.7827448681776, "rotation": 0, "isLocked": false, "opacity": 1, @@ -557,8 +535,8 @@ "props": { "color": "black", "size": "xl", - "w": 375.07245453053696, - "text": "From Top", + "w": 620.6368710143194, + "text": "From \nStraight Above", "font": "draw", "align": "middle", "autoSize": true, @@ -569,8 +547,8 @@ "typeName": "shape" }, { - "x": 4454.33027664319, - "y": -963.3078028504594, + "x": 4914.939779168236, + "y": -1196.6946887670404, "rotation": 0, "isLocked": false, "opacity": 1, @@ -592,8 +570,8 @@ "typeName": "shape" }, { - "x": 4455.743382039469, - "y": -677.1986768240918, + "x": 4916.352884564515, + "y": -892.7552375315945, "rotation": 0, "isLocked": false, "opacity": 1, @@ -606,8 +584,8 @@ "typeName": "shape" }, { - "x": 5388.4972957386335, - "y": -981.1381280595376, + "x": 5849.10679826368, + "y": -1196.6946887670404, "rotation": 0, "isLocked": false, "opacity": 1, @@ -629,8 +607,8 @@ "typeName": "shape" }, { - "x": 7722.063997502218, - "y": -1050.236113218834, + "x": -26.210843806376033, + "y": 2351.423737855385, "rotation": 0, "isLocked": false, "opacity": 1, @@ -650,8 +628,8 @@ "typeName": "shape" }, { - "x": 9247.632871314963, - "y": -985.7024215698013, + "x": 1499.3580300063695, + "y": 2415.9574295044176, "rotation": 0, "isLocked": false, "opacity": 1, @@ -671,8 +649,8 @@ "typeName": "shape" }, { - "x": 11127.309714090754, - "y": -1104.7579472038265, + "x": 3379.03487278216, + "y": 2296.9019038703923, "rotation": 0, "isLocked": false, "opacity": 1, @@ -692,8 +670,8 @@ "typeName": "shape" }, { - "x": 8610.659962213733, - "y": -1428.3187271738625, + "x": 862.385120905139, + "y": 1973.3411239003563, "rotation": 0, "isLocked": false, "opacity": 1, @@ -714,6 +692,173 @@ "index": "aQ", "typeName": "shape" }, + { + "x": 8203.76888615956, + "y": -1235.7827448681776, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:bgh63thztH2bYAvA6UZ3C", + "type": "text", + "props": { + "color": "black", + "size": "xl", + "w": 610.8924210480907, + "text": "From \nStraight Below", + "font": "draw", + "align": "middle", + "autoSize": true, + "scale": 1.8297611929228117 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b05V", + "typeName": "shape" + }, + { + "x": 8268.846148538236, + "y": -604.9700883978435, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:i-6lP7EMT-IeqVRwbASox", + "type": "geo", + "props": { + "w": 488.7984291145008, + "h": 488.7984291145008, + "geo": "ellipse", + "color": "black", + "labelColor": "black", + "fill": "solid", + "dash": "draw", + "size": "m", + "font": "draw", + "text": "", + "align": "middle", + "verticalAlign": "middle", + "growY": 0, + "url": "" + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "az", + "typeName": "shape" + }, + { + "x": 5058.126092713332, + "y": 534.0002813253899, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:oHSpWqScCyP0Pda-kaDk7", + "type": "text", + "props": { + "color": "grey", + "size": "xl", + "w": 24.16666603088379, + "text": "✅", + "font": "sans", + "align": "middle", + "autoSize": true, + "scale": 3.548562932484002 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b0C", + "typeName": "shape" + }, + { + "x": 6883.078480824545, + "y": 379.4034835066593, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:wSxS6zWO_zXVOpKC-MG2l", + "type": "text", + "props": { + "color": "red", + "size": "xl", + "w": 24.16666603088379, + "text": "❌", + "font": "sans", + "align": "middle", + "autoSize": true, + "scale": 4.389068440319015 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b0D", + "typeName": "shape" + }, + { + "x": 7635.694000188957, + "y": -113.57575017599834, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:uiKCOBK_9QM_BKFsn2uwa", + "type": "text", + "props": { + "color": "red", + "size": "xl", + "w": 24.16666603088379, + "text": "❌", + "font": "sans", + "align": "middle", + "autoSize": true, + "scale": 4.389068440319015 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b0E", + "typeName": "shape" + }, + { + "x": 8420.972095253725, + "y": -118.31345965366813, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:mEbKCOTFK6zknDlox3qgo", + "type": "text", + "props": { + "color": "red", + "size": "xl", + "w": 24.16666603088379, + "text": "❌", + "font": "sans", + "align": "middle", + "autoSize": true, + "scale": 4.389068440319015 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b0F", + "typeName": "shape" + }, + { + "x": 6031.655272338277, + "y": 536.3090911255997, + "rotation": 0, + "isLocked": false, + "opacity": 1, + "meta": {}, + "id": "shape:PmXIjAiao6Knx6WtLrXZE", + "type": "text", + "props": { + "color": "grey", + "size": "xl", + "w": 24.16666603088379, + "text": "✅", + "font": "sans", + "align": "middle", + "autoSize": true, + "scale": 3.548562932484002 + }, + "parentId": "page:uEZU1HSz7SqZ2Uxqq6Zuo", + "index": "b0CV", + "typeName": "shape" + }, { "type": "image", "props": { From bede4449093690b6ee23edb4ffe6b567a6d22f0b Mon Sep 17 00:00:00 2001 From: Francois Date: Sun, 24 Sep 2023 15:04:22 -0400 Subject: [PATCH 06/20] Start of Cylinder working --- src/math/Vector3.ts | 18 +++ src/renderer/renderCylinder.ts | 190 +++++++++++++++++++++-------- workbench/scenes/SingleCylinder.ts | 6 +- 3 files changed, 160 insertions(+), 54 deletions(-) diff --git a/src/math/Vector3.ts b/src/math/Vector3.ts index 8a64487..f7aa63c 100644 --- a/src/math/Vector3.ts +++ b/src/math/Vector3.ts @@ -3,6 +3,9 @@ export interface Vector3 { y: number; z: number; set(vec: Vector3): Vector3; + setX(x: number): Vector3; + setY(y: number): Vector3; + setZ(z: number): Vector3; add(vec: Vector3): Vector3; subtract(vec: Vector3): Vector3; multiply(scalar: number): Vector3; @@ -26,6 +29,21 @@ const Vector3Proto = { return this; }, + setX(this: Vector3, x: number): Vector3 { + this.x = x; + return this; + }, + + setY(this: Vector3, y: number): Vector3 { + this.y = y; + return this; + }, + + setZ(this: Vector3, z: number): Vector3 { + this.z = z; + return this; + }, + /** * Adds a vector to this vector, mutating it in place. It * returns this vector, so that API chaining is possible (ie: `v.add(v2).add(v3)`) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 7d6b8ff..d7f28ec 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -18,7 +18,7 @@ enum CylinderEnds { } export function renderCylinder( - _scene: Scene, + scene: Scene, svg: SVGElement, _defs: SVGDefsElement, cylinder: CylinderShape, @@ -53,34 +53,6 @@ export function renderCylinder( const yAxisCameraSpace = yAxisWorldSpace.clone(); inverseCameraMatrix.applyToVector3(yAxisCameraSpace); - const addCylinderEnd = ( - { x, y }: Vector3, - radius: number, - dotProduct: number, - fill: Color - ) => { - const dotProductAbsolute = Math.abs(dotProduct); - // Create a 'circle' element - const circle = document.createElementNS( - "http://www.w3.org/2000/svg", - "ellipse" - ); - - circle.id = "sphere"; - circle.setAttribute("cx", x.toString()); - circle.setAttribute("cy", y.toString()); - - // TODO: Factor in camera projection matrix, this currectly - // ignores all zoom factors. Can we even handle skew with sphere?! - // I don't think we can. - circle.setAttribute("rx", radius.toString()); - circle.setAttribute("ry", (radius * dotProductAbsolute).toString()); - - circle.setAttribute("fill", ColorToCSS(fill)); - - svg.appendChild(circle); - }; - const cylinderScale = worldTransform.getScale().x; const cylinderScaleFactor = cylinderScale * cameraZoom; const Radius = cylinder.radius * cylinderScaleFactor; @@ -91,6 +63,10 @@ export function renderCylinder( const dotProduct = yAxisWorldSpace.dotProduct( cameraDirection.clone().multiply(-1) ); + const dotProductAbsolute = Math.abs(dotProduct); + + const ShortRadius = Radius * dotProductAbsolute; + console.log( `dotProduct: ${dotProduct.toFixed(3)} yAxisCameraSpace: ${yAxisCameraSpace.x.toFixed( @@ -99,12 +75,90 @@ export function renderCylinder( ); const isTopVisible = dotProduct > 0; - addCylinderEnd( - isTopVisible ? points[CylinderEnds.Top] : points[CylinderEnds.Bottom], - cylinder.radius, - dotProduct, - isTopVisible ? Color(255, 0, 0) : Color(0, 0, 255) + const yAxisScreenSpace = Vector3(yAxisCameraSpace.x, -yAxisCameraSpace.y, 0) + .normalize() + .multiply(isTopVisible ? 1 : -1); + + const capCenter = isTopVisible + ? points[CylinderEnds.Top] + : points[CylinderEnds.Bottom]; + + const tailCenter = isTopVisible + ? points[CylinderEnds.Bottom] + : points[CylinderEnds.Top]; + + // addCylinderEnd( + // capCenter, + // cylinder.radius, + // dotProduct, + // isTopVisible ? Color(255, 0, 0) : Color(0, 0, 255), + // svg + // ); + + const leftNormal = Vector3(-yAxisScreenSpace.y, yAxisScreenSpace.x, 0); + const rightNormal = Vector3(yAxisScreenSpace.y, -yAxisScreenSpace.x, 0); + const topLeftPoint = leftNormal.clone().multiply(Radius).add(capCenter); + const topRightPoint = rightNormal.clone().multiply(Radius).add(capCenter); + const bottomLeftPoint = leftNormal.clone().multiply(Radius).add(tailCenter); + const bottomRightPoint = rightNormal.clone().multiply(Radius).add(tailCenter); + + const xAxisRotation = normalToXAxisDegrees(rightNormal.x, rightNormal.y); + const largeArcFlag = 0; + const sweepFlag = 0; + + const reversedLightDirection = scene.directionalLight.direction + .clone() + .multiply(-1); + + const capPath = document.createElementNS( + "http://www.w3.org/2000/svg", + "path" + ); + capPath.setAttribute("id", "cylinder-top"); + capPath.setAttribute( + "fill", + applyLighting( + scene.directionalLight.color, + cylinder.fill, + scene.ambientLightColor, + isTopVisible + ? reversedLightDirection.dotProduct(yAxisWorldSpace) + : reversedLightDirection.dotProduct( + yAxisWorldSpace.clone().multiply(-1) + ) + ) + ); + capPath.setAttribute( + "d", + ` + M ${topLeftPoint.x} ${ + topLeftPoint.y + } A ${Radius} ${ShortRadius} ${xAxisRotation} ${largeArcFlag} ${sweepFlag} ${ + topRightPoint.x + } ${topRightPoint.y} + A ${Radius} ${ShortRadius} ${xAxisRotation} ${1} ${sweepFlag} ${ + topLeftPoint.x + } ${topLeftPoint.y}` + ); + + svg.appendChild(capPath); + + const tubePath = document.createElementNS( + "http://www.w3.org/2000/svg", + "path" + ); + tubePath.setAttribute("id", "cylinder-tube"); + tubePath.setAttribute("fill", "purple"); + tubePath.setAttribute( + "d", + ` + M ${topLeftPoint.x} ${topLeftPoint.y} + A ${Radius} ${ShortRadius} ${xAxisRotation} 0 1 ${topRightPoint.x} ${topRightPoint.y} + L ${bottomRightPoint.x} ${bottomRightPoint.y} + A ${Radius} ${ShortRadius} ${xAxisRotation} 0 0 ${bottomLeftPoint.x} ${bottomLeftPoint.y} + ` ); + svg.appendChild(tubePath); // Scenarios we can view the cylinder from: // 1. From the top/bottom (can't see the tube) @@ -113,30 +167,62 @@ export function renderCylinder( // Are we viewing the cylinder from the top or bottom? - points.forEach(({ x, y }, index) => { - const circle = document.createElementNS( - "http://www.w3.org/2000/svg", - "circle" - ); + // points.forEach(({ x, y }, index) => { + // const circle = document.createElementNS( + // "http://www.w3.org/2000/svg", + // "circle" + // ); - circle.id = "sphere"; - circle.setAttribute("cx", x.toString()); - circle.setAttribute("cy", y.toString()); + // circle.id = "sphere"; + // circle.setAttribute("cx", x.toString()); + // circle.setAttribute("cy", y.toString()); - // TODO: Factor in camera projection matrix, this currectly - // ignores all zoom factors. Can we even handle skew with sphere?! - // I don't think we can. - circle.setAttribute("r", (5).toString()); + // // TODO: Factor in camera projection matrix, this currectly + // // ignores all zoom factors. Can we even handle skew with sphere?! + // // I don't think we can. + // circle.setAttribute("r", (5).toString()); - circle.setAttribute( - "fill", - index === CylinderEnds.Top ? "rgb(128,0,0)" : "rgb(0,0,128)" - ); + // circle.setAttribute( + // "fill", + // index === CylinderEnds.Top ? "rgb(128,0,0)" : "rgb(0,0,128)" + // ); - svg.appendChild(circle); - }); + // svg.appendChild(circle); + // }); // Get the center of the cylinder's top face // Get the center of the cylinder's bottom face } + +function addCylinderEnd( + { x, y }: Vector3, + radius: number, + dotProductAbsolute: number, + fill: Color, + svg: SVGElement +) { + // Create a 'circle' element + const circle = document.createElementNS( + "http://www.w3.org/2000/svg", + "ellipse" + ); + + circle.id = "sphere"; + circle.setAttribute("cx", x.toString()); + circle.setAttribute("cy", y.toString()); + + // TODO: Factor in camera projection matrix, this currectly + // ignores all zoom factors. Can we even handle skew with sphere?! + // I don't think we can. + circle.setAttribute("rx", radius.toString()); + circle.setAttribute("ry", (radius * dotProductAbsolute).toString()); + + circle.setAttribute("fill", ColorToCSS(fill)); + + svg.appendChild(circle); +} + +function normalToXAxisDegrees(x: number, y: number) { + return (Math.atan2(y, x) / Math.PI) * 180; +} diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index e3636b6..4e36489 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -135,8 +135,10 @@ export default function () { // updateCamera(45, 20); // cylinder.rotation.x = now * 90; - cylinder.rotation.x = 0; - cylinder.rotation.z = 0; + cylinder.rotation.x = 45; + cylinder.rotation.y = now * 90; + + // cylinder.rotation.x = now * 90; // lightSphere.position.x = // Math.sin(now * Math.PI * 2 * lightSpeed) * lightDistance; From 2adaa2038654e7b27e979a38b40f01624312b26a Mon Sep 17 00:00:00 2001 From: Francois Date: Sun, 24 Sep 2023 15:08:02 -0400 Subject: [PATCH 07/20] Started to add stroke support to and cylinder is starting to work using just a simple tube and cap path --- src/renderer/renderCylinder.ts | 15 +++++++++++++-- workbench/scenes/SingleCylinder.ts | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index d7f28ec..a8f05d4 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -128,6 +128,18 @@ export function renderCylinder( ) ) ); + + if (cylinder.strokeWidth && cylinder.stroke.a > 0.0) { + capPath.setAttribute("stroke", ColorToCSS(cylinder.stroke)); + + if (cylinder.strokeWidth !== 1.0) { + capPath.setAttribute( + "stroke-width", + (cylinder.strokeWidth * cylinderScaleFactor).toString() + ); + } + } + capPath.setAttribute( "d", ` @@ -141,8 +153,6 @@ export function renderCylinder( } ${topLeftPoint.y}` ); - svg.appendChild(capPath); - const tubePath = document.createElementNS( "http://www.w3.org/2000/svg", "path" @@ -159,6 +169,7 @@ export function renderCylinder( ` ); svg.appendChild(tubePath); + svg.appendChild(capPath); // Scenarios we can view the cylinder from: // 1. From the top/bottom (can't see the tube) diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index 4e36489..5db1d28 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -42,7 +42,7 @@ export default function () { // radius: referenceRadius, fill: Color(255, 0, 0), stroke: Color(0, 0, 0), - strokeWidth: 0, + strokeWidth: 4, }); const scene: Scene = { From e3c0880f941bdb3d7e54f39e8057a491bf201952 Mon Sep 17 00:00:00 2001 From: Francois Date: Sun, 24 Sep 2023 15:12:16 -0400 Subject: [PATCH 08/20] Cylinder strokes working well --- src/renderer/renderCylinder.ts | 35 +++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index a8f05d4..d71014f 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -129,16 +129,8 @@ export function renderCylinder( ) ); - if (cylinder.strokeWidth && cylinder.stroke.a > 0.0) { - capPath.setAttribute("stroke", ColorToCSS(cylinder.stroke)); - - if (cylinder.strokeWidth !== 1.0) { - capPath.setAttribute( - "stroke-width", - (cylinder.strokeWidth * cylinderScaleFactor).toString() - ); - } - } + addStrokeAttribute(capPath, cylinder, cylinderScaleFactor); + svg.appendChild(capPath); capPath.setAttribute( "d", @@ -166,10 +158,14 @@ export function renderCylinder( A ${Radius} ${ShortRadius} ${xAxisRotation} 0 1 ${topRightPoint.x} ${topRightPoint.y} L ${bottomRightPoint.x} ${bottomRightPoint.y} A ${Radius} ${ShortRadius} ${xAxisRotation} 0 0 ${bottomLeftPoint.x} ${bottomLeftPoint.y} + Z ` ); + + addStrokeAttribute(tubePath, cylinder, cylinderScaleFactor); + svg.appendChild(tubePath); - svg.appendChild(capPath); + // Add Cap last // Scenarios we can view the cylinder from: // 1. From the top/bottom (can't see the tube) @@ -206,6 +202,23 @@ export function renderCylinder( // Get the center of the cylinder's bottom face } +function addStrokeAttribute( + svgShape: SVGElement, + cylinderShape: CylinderShape, + scaleFactor: number +) { + if (cylinderShape.strokeWidth && cylinderShape.stroke.a > 0.0) { + svgShape.setAttribute("stroke", ColorToCSS(cylinderShape.stroke)); + + if (cylinderShape.strokeWidth !== 1.0) { + svgShape.setAttribute( + "stroke-width", + (cylinderShape.strokeWidth * scaleFactor).toString() + ); + } + } +} + function addCylinderEnd( { x, y }: Vector3, radius: number, From e4eb0f4355470846abb02eaeed13a44e8388a1fc Mon Sep 17 00:00:00 2001 From: Francois Date: Sun, 24 Sep 2023 15:33:30 -0400 Subject: [PATCH 09/20] Added crack filling work around to Cylinders --- src/renderer/renderCylinder.ts | 86 ++++++++++++++++++++++++------ workbench/scenes/SingleCylinder.ts | 2 +- 2 files changed, 72 insertions(+), 16 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index d71014f..58b2a12 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -17,10 +17,12 @@ enum CylinderEnds { Bottom = 1, } +const CrackFillingStrokeWidth = 0.5; + export function renderCylinder( scene: Scene, svg: SVGElement, - _defs: SVGDefsElement, + defs: SVGDefsElement, cylinder: CylinderShape, viewport: Viewport, worldTransform: Matrix4x4, @@ -115,21 +117,18 @@ export function renderCylinder( "path" ); capPath.setAttribute("id", "cylinder-top"); - capPath.setAttribute( - "fill", - applyLighting( - scene.directionalLight.color, - cylinder.fill, - scene.ambientLightColor, - isTopVisible - ? reversedLightDirection.dotProduct(yAxisWorldSpace) - : reversedLightDirection.dotProduct( - yAxisWorldSpace.clone().multiply(-1) - ) - ) + + const capFill = applyLighting( + scene.directionalLight.color, + cylinder.fill, + scene.ambientLightColor, + isTopVisible + ? reversedLightDirection.dotProduct(yAxisWorldSpace) + : reversedLightDirection.dotProduct(yAxisWorldSpace.clone().multiply(-1)) ); + capPath.setAttribute("fill", capFill); - addStrokeAttribute(capPath, cylinder, cylinderScaleFactor); + addStrokeAttribute(capPath, cylinder, cylinderScaleFactor, capFill); svg.appendChild(capPath); capPath.setAttribute( @@ -165,6 +164,56 @@ export function renderCylinder( addStrokeAttribute(tubePath, cylinder, cylinderScaleFactor); svg.appendChild(tubePath); + + const uuid = crypto.randomUUID(); + const fillUuid = uuid + "-fill"; + const fillUrl = `url(#${fillUuid})`; + + tubePath.setAttribute("fill", fillUrl); + + // Create the 'radialGradient' element + const linearGradient = document.createElementNS( + "http://www.w3.org/2000/svg", + "linearGradient" + ); + + linearGradient.setAttribute("id", fillUuid); + linearGradient.setAttribute("gradientUnits", "userSpaceOnUse"); + + // Make the control points of the gradient the center of the cylinder's + // just to keep it nice and organized when editing in Figma and such later + const leftOfTubeCenter = topLeftPoint + .clone() + .add(bottomLeftPoint) + .multiply(0.5); + const rightOfTubeCenter = topRightPoint + .clone() + .add(bottomRightPoint) + .multiply(0.5); + + linearGradient.setAttribute("x1", leftOfTubeCenter.x.toString()); + linearGradient.setAttribute("y1", leftOfTubeCenter.y.toString()); + linearGradient.setAttribute("x2", rightOfTubeCenter.x.toString()); + linearGradient.setAttribute("y2", rightOfTubeCenter.y.toString()); + + const gradientStops = [ + { offset: 0, stopColor: ColorToCSS(cylinder.fill) }, + { offset: 1.0, stopColor: ColorToCSS(Color(0, 0, 0)) }, + ]; + + for (let stop of gradientStops) { + const stopElement = document.createElementNS( + "http://www.w3.org/2000/svg", + "stop" + ); + + stopElement.setAttribute("offset", stop.offset.toString()); + stopElement.setAttribute("stop-color", stop.stopColor); + linearGradient.appendChild(stopElement); + } + + defs.appendChild(linearGradient); + // Add Cap last // Scenarios we can view the cylinder from: @@ -205,7 +254,8 @@ export function renderCylinder( function addStrokeAttribute( svgShape: SVGElement, cylinderShape: CylinderShape, - scaleFactor: number + scaleFactor: number, + fillColor?: string ) { if (cylinderShape.strokeWidth && cylinderShape.stroke.a > 0.0) { svgShape.setAttribute("stroke", ColorToCSS(cylinderShape.stroke)); @@ -216,6 +266,12 @@ function addStrokeAttribute( (cylinderShape.strokeWidth * scaleFactor).toString() ); } + } else if (fillColor !== undefined) { + svgShape.setAttribute("stroke", fillColor); + svgShape.setAttribute( + "stroke-width", + (CrackFillingStrokeWidth * scaleFactor).toString() + ); } } diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index 5db1d28..4e36489 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -42,7 +42,7 @@ export default function () { // radius: referenceRadius, fill: Color(255, 0, 0), stroke: Color(0, 0, 0), - strokeWidth: 4, + strokeWidth: 0, }); const scene: Scene = { From 8a932f6155e98d6fe07de5c9c8ab2474efefb812 Mon Sep 17 00:00:00 2001 From: Francois Date: Sun, 24 Sep 2023 16:02:35 -0400 Subject: [PATCH 10/20] Some more fixes --- src/renderer/renderCylinder.ts | 12 +++++++----- workbench/Settings.ts | 2 +- workbench/scenes/SingleCylinder.ts | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 58b2a12..bc2f9b6 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -53,7 +53,7 @@ export function renderCylinder( Vector3(0, 0, 0) ); const yAxisCameraSpace = yAxisWorldSpace.clone(); - inverseCameraMatrix.applyToVector3(yAxisCameraSpace); + inverseCameraMatrix.extractRotation().applyToVector3(yAxisCameraSpace); const cylinderScale = worldTransform.getScale().x; const cylinderScaleFactor = cylinderScale * cameraZoom; @@ -62,20 +62,22 @@ export function renderCylinder( // Top === -1 // Front === 0 // Bottom === 1 - const dotProduct = yAxisWorldSpace.dotProduct( - cameraDirection.clone().multiply(-1) + const dotProduct = yAxisCameraSpace.dotProduct( + // cameraDirection.clone().multiply(-1) + Vector3(0, 0, 1) ); const dotProductAbsolute = Math.abs(dotProduct); const ShortRadius = Radius * dotProductAbsolute; + const isTopVisible = dotProduct > 0; console.log( - `dotProduct: ${dotProduct.toFixed(3)} + `scenario: ${isTopVisible ? "top" : "bottom"} + dotProduct: ${dotProduct.toFixed(3)} yAxisCameraSpace: ${yAxisCameraSpace.x.toFixed( 2 )}, ${yAxisCameraSpace.y.toFixed(2)}, ${yAxisCameraSpace.z.toFixed(2)}` ); - const isTopVisible = dotProduct > 0; const yAxisScreenSpace = Vector3(yAxisCameraSpace.x, -yAxisCameraSpace.y, 0) .normalize() diff --git a/workbench/Settings.ts b/workbench/Settings.ts index f6e9ee4..b628ed3 100644 --- a/workbench/Settings.ts +++ b/workbench/Settings.ts @@ -162,7 +162,7 @@ export function getCamera(choice: CameraChoice, zoom: number = 1) { case "top": camera.matrix.makeTranslation(0, 0, 0); - camera.matrix.makeRotationX(Math.PI / 2); + camera.matrix.makeRotationX(-Math.PI / 2); break; case "isometric": { diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index 4e36489..98d6ec2 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -128,14 +128,14 @@ export default function () { document.addEventListener("pointerup", onPointerEvent); onUpdate(({ now, deltaTime }) => { - const cameraSpeed = 0.1; - // const cameraSpeed = 0.0; + // const cameraSpeed = 0.1; + const cameraSpeed = 0.0; updateCamera(now * cameraSpeed * 360 + 45, 20); // updateCamera(45, 20); // cylinder.rotation.x = now * 90; - cylinder.rotation.x = 45; + // cylinder.rotation.x = 45; cylinder.rotation.y = now * 90; // cylinder.rotation.x = now * 90; From ad37d7a82390e5c0f659853edfa284713ba64e33 Mon Sep 17 00:00:00 2001 From: Francois Date: Sun, 24 Sep 2023 16:03:32 -0400 Subject: [PATCH 11/20] Fixed 'top' camera mode which turned out to be bottom camera mode --- workbench/scenes/SingleCylinder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index 98d6ec2..6233aa8 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -64,7 +64,7 @@ export default function () { lightSphere.position = Vector3(1, 1, -1); - const { viewport, camera, updateCamera } = getCamera("top"); + const { viewport, camera, updateCamera } = getCamera("isometric"); const onPointerEvent = (event: PointerEvent) => { // return; From fd78db348db96b6152187bed46035d05fbee8614 Mon Sep 17 00:00:00 2001 From: Francois Date: Sun, 24 Sep 2023 18:09:06 -0400 Subject: [PATCH 12/20] Sorta getting there, math isn't quite right --- src/renderer/renderCylinder.ts | 52 +++++++++++++++++++----------- workbench/scenes/SingleCylinder.ts | 26 ++------------- 2 files changed, 37 insertions(+), 41 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index bc2f9b6..306973c 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -55,21 +55,17 @@ export function renderCylinder( const yAxisCameraSpace = yAxisWorldSpace.clone(); inverseCameraMatrix.extractRotation().applyToVector3(yAxisCameraSpace); - const cylinderScale = worldTransform.getScale().x; - const cylinderScaleFactor = cylinderScale * cameraZoom; - const Radius = cylinder.radius * cylinderScaleFactor; - // Top === -1 // Front === 0 // Bottom === 1 - const dotProduct = yAxisCameraSpace.dotProduct( - // cameraDirection.clone().multiply(-1) - Vector3(0, 0, 1) - ); + const dotProduct = yAxisCameraSpace.dotProduct(Vector3(0, 0, 1)); // This boils down to just taking the z component const dotProductAbsolute = Math.abs(dotProduct); + const isTopVisible = dotProduct > 0; + const cylinderScale = worldTransform.getScale().x; + const cylinderScaleFactor = cylinderScale * cameraZoom; + const Radius = cylinder.radius * cylinderScaleFactor; const ShortRadius = Radius * dotProductAbsolute; - const isTopVisible = dotProduct > 0; console.log( `scenario: ${isTopVisible ? "top" : "bottom"} @@ -164,9 +160,20 @@ export function renderCylinder( ); addStrokeAttribute(tubePath, cylinder, cylinderScaleFactor); - svg.appendChild(tubePath); + // Convert the light direction into camera space (not projected into screen space) + const directionalLightInCameraSpace = scene.directionalLight.direction + .clone() + .multiply(-1); + inverseCameraMatrix + .extractRotation() + .applyToVector3(directionalLightInCameraSpace); + // Then convert it into screen aligned cylinder space + Matrix4x4() + .makeRotationZ((xAxisRotation / 180) * Math.PI) + .applyToVector3(directionalLightInCameraSpace); + const uuid = crypto.randomUUID(); const fillUuid = uuid + "-fill"; const fillUrl = `url(#${fillUuid})`; @@ -198,19 +205,28 @@ export function renderCylinder( linearGradient.setAttribute("x2", rightOfTubeCenter.x.toString()); linearGradient.setAttribute("y2", rightOfTubeCenter.y.toString()); - const gradientStops = [ - { offset: 0, stopColor: ColorToCSS(cylinder.fill) }, - { offset: 1.0, stopColor: ColorToCSS(Color(0, 0, 0)) }, - ]; + // Add the gradient stops + const GradientSteps = Math.min(2, Math.max(255, Math.floor(Radius))); + + for (let i = 0; i < GradientSteps; i++) { + const normalized = i / (GradientSteps - 1); + const x = Math.sin(normalized * Math.PI); + const z = Math.cos(normalized * Math.PI + Math.PI); - for (let stop of gradientStops) { const stopElement = document.createElementNS( "http://www.w3.org/2000/svg", "stop" ); - - stopElement.setAttribute("offset", stop.offset.toString()); - stopElement.setAttribute("stop-color", stop.stopColor); + stopElement.setAttribute("offset", normalized.toFixed(3)); + stopElement.setAttribute( + "stop-color", + applyLighting( + scene.directionalLight.color, + cylinder.fill, + scene.ambientLightColor, + directionalLightInCameraSpace.dotProduct(Vector3(x, 0, z)) + ) + ); linearGradient.appendChild(stopElement); } diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index 6233aa8..f3cfa55 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -80,19 +80,6 @@ export default function () { const distanceNormalized = distance / referenceRadius; let degrees = distanceNormalized * 90; - //Math.cos(((distanceNormalized * 90) / 180) * Math.PI); - // console.log( - // degrees, - // event.clientX, - // event.clientY, - // centerX, - // centerY, - // diffX, - // diffY, - // distance, - // distanceNormalized - // ); - const spinMode: string = "z"; if (spinMode === "y") { @@ -100,7 +87,6 @@ export default function () { degrees *= -1; } lightSphere.position.x = Math.sin((degrees / 180) * Math.PI); - // lightSphere.position.y = 0.0; lightSphere.position.y = 0.5; lightSphere.position.z = Math.cos((degrees / 180) * Math.PI); @@ -111,17 +97,10 @@ export default function () { } else if (spinMode === "z") { lightSphere.position.x = Math.sin((degrees / 180) * Math.PI); lightSphere.position.y = Math.cos((degrees / 180) * Math.PI); - lightSphere.position.z = 0; // - // lightSphere.position.z = -0.5; // + lightSphere.position.z = 0; } lightSphere.position.normalize().multiply(lightDistance).add(position); - - // const x = event.clientX; - // const z = event.clientY; - // lightSphere.position.y = 0; - // const x = event.clientX; - // const y = event.clientY; }; document.addEventListener("pointerdown", onPointerEvent); document.addEventListener("pointermove", onPointerEvent); @@ -136,7 +115,8 @@ export default function () { // cylinder.rotation.x = now * 90; // cylinder.rotation.x = 45; - cylinder.rotation.y = now * 90; + cylinder.rotation.x = 90; + // cylinder.rotation.y = now * 90; // cylinder.rotation.x = now * 90; From b97513b9cdc642349b73552c6a099c98b8f20058 Mon Sep 17 00:00:00 2001 From: Francois Date: Mon, 25 Sep 2023 13:01:12 -0400 Subject: [PATCH 13/20] Getting closer to cylinder rendering --- src/renderer/renderCylinder.ts | 19 ++++++++++++++++--- workbench/Settings.ts | 18 +++++++++++++++++- workbench/scenes/SingleCylinder.ts | 21 ++++++++++++++------- 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 306973c..136dc6f 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -205,13 +205,26 @@ export function renderCylinder( linearGradient.setAttribute("x2", rightOfTubeCenter.x.toString()); linearGradient.setAttribute("y2", rightOfTubeCenter.y.toString()); + const leftEdgeNormal = Vector3(0, 0, 1) + .crossProduct(yAxisCameraSpace) + .normalize(); + + const lightingSpace = Matrix4x4().lookAt( + Vector3(0, 0, 0), + leftEdgeNormal, + yAxisCameraSpace + ); + // Add the gradient stops - const GradientSteps = Math.min(2, Math.max(255, Math.floor(Radius))); + const GradientSteps = Math.max(2, Math.min(255, Math.floor(Radius))); for (let i = 0; i < GradientSteps; i++) { const normalized = i / (GradientSteps - 1); - const x = Math.sin(normalized * Math.PI); + const x = Math.cos(normalized * Math.PI + Math.PI / 2); const z = Math.cos(normalized * Math.PI + Math.PI); + const normal = Vector3(x, 0, z); + + lightingSpace.applyToVector3(normal); const stopElement = document.createElementNS( "http://www.w3.org/2000/svg", @@ -224,7 +237,7 @@ export function renderCylinder( scene.directionalLight.color, cylinder.fill, scene.ambientLightColor, - directionalLightInCameraSpace.dotProduct(Vector3(x, 0, z)) + directionalLightInCameraSpace.dotProduct(normal) ) ); linearGradient.appendChild(stopElement); diff --git a/workbench/Settings.ts b/workbench/Settings.ts index b628ed3..28574c8 100644 --- a/workbench/Settings.ts +++ b/workbench/Settings.ts @@ -11,7 +11,12 @@ import { Viewport, } from "../src"; -export type LightingChoice = "reference" | "moonlit" | "underwater" | "none"; +export type LightingChoice = + | "reference" + | "black and white" + | "moonlit" + | "underwater" + | "none"; export function getLighting(lighting: LightingChoice): { directionalLight: DirectionalLight; @@ -38,6 +43,17 @@ export function getLighting(lighting: LightingChoice): { g: 252, b: 255, }; + } else if (lighting === "black and white") { + ambientLightColor = { + r: 0, + g: 0, + b: 0, + }; + directionalLightColor = { + r: 255, + g: 252, + b: 255, + }; } else if (lighting === "moonlit") { // Bluish white ambientLightColor = { diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index f3cfa55..f88f445 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -40,13 +40,13 @@ export default function () { radius: referenceRadius, height, // radius: referenceRadius, - fill: Color(255, 0, 0), + fill: Color(255, 255, 255), stroke: Color(0, 0, 0), strokeWidth: 0, }); const scene: Scene = { - ...getLighting("reference"), + ...getLighting("black and white"), shapes: [ getEnvironment("grid"), // Axii(Vector3(-referenceRadius * 3, 0, 0)), @@ -76,6 +76,7 @@ export default function () { const diffX = event.clientX - centerX; const diffY = event.clientY - centerY; const distance = Math.sqrt(diffX * diffX + diffY * diffY); + const lightSpeed = 2; const distanceNormalized = distance / referenceRadius; let degrees = distanceNormalized * 90; @@ -86,17 +87,17 @@ export default function () { if (diffX < 0) { degrees *= -1; } - lightSphere.position.x = Math.sin((degrees / 180) * Math.PI); - lightSphere.position.y = 0.5; - lightSphere.position.z = Math.cos((degrees / 180) * Math.PI); + lightSphere.position.x = Math.sin((degrees / 180) * Math.PI * lightSpeed); + lightSphere.position.y = 0.0; + lightSphere.position.z = Math.cos((degrees / 180) * Math.PI * lightSpeed); if (event.buttons === 1) { console.log(); lightSphere.position.z *= -1; } } else if (spinMode === "z") { - lightSphere.position.x = Math.sin((degrees / 180) * Math.PI); - lightSphere.position.y = Math.cos((degrees / 180) * Math.PI); + lightSphere.position.x = Math.sin((degrees / 180) * Math.PI * lightSpeed); + lightSphere.position.y = Math.cos((degrees / 180) * Math.PI * lightSpeed); lightSphere.position.z = 0; } @@ -126,11 +127,17 @@ export default function () { // lightSphere.position.z = // Math.cos(now * Math.PI * 2 * lightSpeed) * lightDistance; + // lightSphere.position = Vector3(1, 0, 1).multiply(lightDistance); + scene.directionalLight.direction = lightSphere.position + .clone() + .setY(0) .clone() .normalize() .multiply(-1); + lightSphere.position.y = height / 2; + render(document.getElementById("root")!, scene, viewport, camera); }); } From 87d7d1377e2f2d38c4740e81574119da8e151ac6 Mon Sep 17 00:00:00 2001 From: Francois Date: Tue, 26 Sep 2023 09:47:05 -0400 Subject: [PATCH 14/20] Looking better, but still having some subtle issues. In the SingleCylder demo I'm getting some sort of flip effect with the lighting --- src/math/Matrix4x4.ts | 20 +++++++++++++------- src/renderer/renderCylinder.ts | 25 +++++++++---------------- workbench/scenes/SingleCylinder.ts | 4 +--- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/math/Matrix4x4.ts b/src/math/Matrix4x4.ts index 6962a64..c69cc91 100644 --- a/src/math/Matrix4x4.ts +++ b/src/math/Matrix4x4.ts @@ -26,7 +26,7 @@ export interface Matrix4x4 { copyPosition(matrix: Matrix4x4): Matrix4x4; getTranslation(): Vector3; getScale(): Vector3; - extractBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): Matrix4x4; + extractBasis(xAxis?: Vector3, yAxis?: Vector3, zAxis?: Vector3): Matrix4x4; extractRotation(): Matrix4x4; lookAt(eye: Vector3, target: Vector3, up: Vector3): Matrix4x4; @@ -313,13 +313,19 @@ const Matrix4x4Proto = { extractBasis( this: Matrix4x4, - xAxis: Vector3, - yAxis: Vector3, - zAxis: Vector3 + xAxis?: Vector3, + yAxis?: Vector3, + zAxis?: Vector3 ) { - setVector3FromMatrixElements(xAxis, this.elements, 0); - setVector3FromMatrixElements(yAxis, this.elements, 4); - setVector3FromMatrixElements(zAxis, this.elements, 8); + if (xAxis !== undefined) { + setVector3FromMatrixElements(xAxis, this.elements, 0); + } + if (yAxis !== undefined) { + setVector3FromMatrixElements(yAxis, this.elements, 4); + } + if (zAxis !== undefined) { + setVector3FromMatrixElements(zAxis, this.elements, 8); + } return this; }, diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 136dc6f..31730f4 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -47,11 +47,7 @@ export function renderCylinder( }); const yAxisWorldSpace = Vector3(0, 0, 0); - worldTransform.extractBasis( - Vector3(0, 0, 0), - yAxisWorldSpace, - Vector3(0, 0, 0) - ); + worldTransform.extractBasis(undefined, yAxisWorldSpace, undefined); const yAxisCameraSpace = yAxisWorldSpace.clone(); inverseCameraMatrix.extractRotation().applyToVector3(yAxisCameraSpace); @@ -75,9 +71,12 @@ export function renderCylinder( )}, ${yAxisCameraSpace.y.toFixed(2)}, ${yAxisCameraSpace.z.toFixed(2)}` ); - const yAxisScreenSpace = Vector3(yAxisCameraSpace.x, -yAxisCameraSpace.y, 0) - .normalize() - .multiply(isTopVisible ? 1 : -1); + const yAxisScreenSpace = Vector3( + yAxisCameraSpace.x, + -yAxisCameraSpace.y, + 0 + ).normalize(); + // .multiply(isTopVisible ? 1 : -1); const capCenter = isTopVisible ? points[CylinderEnds.Top] @@ -163,16 +162,10 @@ export function renderCylinder( svg.appendChild(tubePath); // Convert the light direction into camera space (not projected into screen space) - const directionalLightInCameraSpace = scene.directionalLight.direction - .clone() - .multiply(-1); + const directionalLightInCameraSpace = reversedLightDirection.clone(); inverseCameraMatrix .extractRotation() .applyToVector3(directionalLightInCameraSpace); - // Then convert it into screen aligned cylinder space - Matrix4x4() - .makeRotationZ((xAxisRotation / 180) * Math.PI) - .applyToVector3(directionalLightInCameraSpace); const uuid = crypto.randomUUID(); const fillUuid = uuid + "-fill"; @@ -221,7 +214,7 @@ export function renderCylinder( for (let i = 0; i < GradientSteps; i++) { const normalized = i / (GradientSteps - 1); const x = Math.cos(normalized * Math.PI + Math.PI / 2); - const z = Math.cos(normalized * Math.PI + Math.PI); + const z = -Math.cos(normalized * Math.PI + Math.PI); const normal = Vector3(x, 0, z); lightingSpace.applyToVector3(normal); diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index f88f445..3b6bda5 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -130,13 +130,11 @@ export default function () { // lightSphere.position = Vector3(1, 0, 1).multiply(lightDistance); scene.directionalLight.direction = lightSphere.position - .clone() - .setY(0) .clone() .normalize() .multiply(-1); - lightSphere.position.y = height / 2; + // lightSphere.position.y = height / 2; render(document.getElementById("root")!, scene, viewport, camera); }); From ce9d0f028d5c93c2ae0ff9916f7dbbbe1bdb850e Mon Sep 17 00:00:00 2001 From: Francois Date: Tue, 26 Sep 2023 09:53:59 -0400 Subject: [PATCH 15/20] ... --- workbench/scenes/SingleCylinder.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index 3b6bda5..07c004e 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -45,6 +45,17 @@ export default function () { strokeWidth: 0, }); + // const cylinder = Box({ + // id: "reference", + // position, + // width: referenceRadius * 2, + // height, + // // radius: referenceRadius, + // fill: Color(255, 255, 255), + // stroke: Color(0, 0, 0), + // strokeWidth: 0, + // }); + const scene: Scene = { ...getLighting("black and white"), shapes: [ @@ -114,7 +125,7 @@ export default function () { // updateCamera(45, 20); - // cylinder.rotation.x = now * 90; + // cylinder.rotation.x = (now * 90) % 360; // cylinder.rotation.x = 45; cylinder.rotation.x = 90; // cylinder.rotation.y = now * 90; From 9afbd3c680bd8da88fd812be3e0cce79eb45153e Mon Sep 17 00:00:00 2001 From: Francois Date: Sat, 14 Oct 2023 21:45:09 -0400 Subject: [PATCH 16/20] Added start of debugrender functions. Not finished/not hooked up --- src/renderer/DebugRenderer.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/renderer/DebugRenderer.ts diff --git a/src/renderer/DebugRenderer.ts b/src/renderer/DebugRenderer.ts new file mode 100644 index 0000000..9aa843a --- /dev/null +++ b/src/renderer/DebugRenderer.ts @@ -0,0 +1,19 @@ +import { Color, ColorToCSS } from "../colors/Color"; + +export function DebugLine2D( + svg: SVGElement, + x: number, + y: number, + x2: number, + y2: number, + stroke: Color = Color(0, 0, 0) +) { + const line = document.createElementNS("http://www.w3.org/2000/svg", "line"); + line.setAttribute("x1", x.toFixed(2)); + line.setAttribute("y1", y.toFixed(2)); + line.setAttribute("x2", x2.toFixed(2)); + line.setAttribute("y2", y2.toFixed(2)); + line.setAttribute("stroke", ColorToCSS(stroke)); + // line.setAttribute("stroke-width", "0.1"); + svg.appendChild(line); +} From d63bf474900578672df1e9a8a6db7b0cf1e18ca6 Mon Sep 17 00:00:00 2001 From: Francois Date: Mon, 16 Oct 2023 09:25:16 -0400 Subject: [PATCH 17/20] Cylinder rendering is looking correct --- src/index.ts | 1 + src/renderer/DebugRenderer.ts | 22 +++-- src/renderer/Renderer.ts | 5 ++ src/renderer/renderCylinder.ts | 130 +++++++++++++++++++---------- workbench/main.ts | 4 +- workbench/scenes/SingleCylinder.ts | 11 ++- 6 files changed, 119 insertions(+), 54 deletions(-) diff --git a/src/index.ts b/src/index.ts index 8807392..bf527a2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ export * from "./renderer/Scene"; export * from "./renderer/Viewport"; export * from "./renderer/Renderer"; +export * from "./renderer/DebugRenderer"; export * from "./colors/Color"; export * from "./lighting/DirectionalLight"; export * from "./lighting/LightingModel"; diff --git a/src/renderer/DebugRenderer.ts b/src/renderer/DebugRenderer.ts index 9aa843a..d11575c 100644 --- a/src/renderer/DebugRenderer.ts +++ b/src/renderer/DebugRenderer.ts @@ -1,19 +1,31 @@ import { Color, ColorToCSS } from "../colors/Color"; +import { Viewport } from "./Viewport"; export function DebugLine2D( svg: SVGElement, + viewport: Viewport, x: number, y: number, x2: number, y2: number, stroke: Color = Color(0, 0, 0) ) { + const centerX = viewport.width / 2; + const centerY = viewport.height / 2; const line = document.createElementNS("http://www.w3.org/2000/svg", "line"); - line.setAttribute("x1", x.toFixed(2)); - line.setAttribute("y1", y.toFixed(2)); - line.setAttribute("x2", x2.toFixed(2)); - line.setAttribute("y2", y2.toFixed(2)); + line.style.zIndex = "1000"; + line.setAttribute("x1", (x + centerX).toFixed(2)); + line.setAttribute("y1", (y + centerY).toFixed(2)); + line.setAttribute("x2", (x2 + centerX).toFixed(2)); + line.setAttribute("y2", (y2 + centerY).toFixed(2)); line.setAttribute("stroke", ColorToCSS(stroke)); // line.setAttribute("stroke-width", "0.1"); - svg.appendChild(line); + + // @ts-ignore + if (!svg.debugQueue) { + // @ts-ignore + svg.debugQueue = []; + } + // @ts-ignore + svg.debugQueue.push(line); } diff --git a/src/renderer/Renderer.ts b/src/renderer/Renderer.ts index 6ad559f..03df6be 100644 --- a/src/renderer/Renderer.ts +++ b/src/renderer/Renderer.ts @@ -131,6 +131,11 @@ export function render( } } + // @ts-ignore + svg.debugQueue?.forEach((element) => { + svg.appendChild(element); + }); + container.appendChild(svg); } diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 31730f4..0ed2b35 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -9,6 +9,7 @@ import { applyLighting } from "../lighting/LightingModel"; import { Matrix4x4 } from "../math/Matrix4x4"; import { Vector3 } from "../math/Vector3"; import { CylinderShape } from "../shapes/Shape"; +import { DebugLine2D } from "./DebugRenderer"; import { Scene } from "./Scene"; import { Viewport } from "./Viewport"; @@ -31,7 +32,8 @@ export function renderCylinder( inverseCameraMatrix: Matrix4x4, inverseAndProjectionMatrix: Matrix4x4 ) { - const points: Vector3[] = [ + // Get screen space coordinates for the top and bottom of the cylinder + const capsInScreenSpace: Vector3[] = [ // Top Vector3(0, cylinder.height / 2, 0), // Bottom @@ -46,17 +48,31 @@ export function renderCylinder( ); }); - const yAxisWorldSpace = Vector3(0, 0, 0); - worldTransform.extractBasis(undefined, yAxisWorldSpace, undefined); - const yAxisCameraSpace = yAxisWorldSpace.clone(); - inverseCameraMatrix.extractRotation().applyToVector3(yAxisCameraSpace); + const cylinderYAxisWorldSpace = Vector3(0, 0, 0); + worldTransform.extractBasis(undefined, cylinderYAxisWorldSpace, undefined); + + const cylinderYAxisCameraSpace = cylinderYAxisWorldSpace.clone(); + inverseCameraMatrix + .extractRotation() + .applyToVector3(cylinderYAxisCameraSpace); + + // DebugLine2D( + // svg, + // viewport, + // 0, + // 0, + // cylinderYAxisCameraSpace.x * 100, + // -cylinderYAxisCameraSpace.y * 100, + // Color(255, 0, 0) + // ); // Top === -1 // Front === 0 // Bottom === 1 - const dotProduct = yAxisCameraSpace.dotProduct(Vector3(0, 0, 1)); // This boils down to just taking the z component + const dotProduct = cylinderYAxisCameraSpace.dotProduct(Vector3(0, 0, 1)); // This boils down to just taking the z component const dotProductAbsolute = Math.abs(dotProduct); const isTopVisible = dotProduct > 0; + console.log(`isTopVisible: ${isTopVisible}`); const cylinderScale = worldTransform.getScale().x; const cylinderScaleFactor = cylinderScale * cameraZoom; @@ -66,25 +82,35 @@ export function renderCylinder( console.log( `scenario: ${isTopVisible ? "top" : "bottom"} dotProduct: ${dotProduct.toFixed(3)} - yAxisCameraSpace: ${yAxisCameraSpace.x.toFixed( + yAxisCameraSpace: ${cylinderYAxisCameraSpace.x.toFixed( 2 - )}, ${yAxisCameraSpace.y.toFixed(2)}, ${yAxisCameraSpace.z.toFixed(2)}` + )}, ${cylinderYAxisCameraSpace.y.toFixed( + 2 + )}, ${cylinderYAxisCameraSpace.z.toFixed(2)}` ); - const yAxisScreenSpace = Vector3( - yAxisCameraSpace.x, - -yAxisCameraSpace.y, + const visibleUpAxisWorldSpace = isTopVisible + ? cylinderYAxisWorldSpace.clone() + : cylinderYAxisWorldSpace.clone().multiply(-1); + + const visibleUpAxisCameraSpace = isTopVisible + ? cylinderYAxisCameraSpace.clone() + : cylinderYAxisCameraSpace.clone().multiply(-1); + + const visibleUpAxisScreenSpace = Vector3( + visibleUpAxisCameraSpace.x, + -visibleUpAxisCameraSpace.y, 0 ).normalize(); // .multiply(isTopVisible ? 1 : -1); - const capCenter = isTopVisible - ? points[CylinderEnds.Top] - : points[CylinderEnds.Bottom]; + const visibleCapCenter = isTopVisible + ? capsInScreenSpace[CylinderEnds.Top] + : capsInScreenSpace[CylinderEnds.Bottom]; - const tailCenter = isTopVisible - ? points[CylinderEnds.Bottom] - : points[CylinderEnds.Top]; + const hiddenCapCenter = isTopVisible + ? capsInScreenSpace[CylinderEnds.Bottom] + : capsInScreenSpace[CylinderEnds.Top]; // addCylinderEnd( // capCenter, @@ -94,12 +120,32 @@ export function renderCylinder( // svg // ); - const leftNormal = Vector3(-yAxisScreenSpace.y, yAxisScreenSpace.x, 0); - const rightNormal = Vector3(yAxisScreenSpace.y, -yAxisScreenSpace.x, 0); - const topLeftPoint = leftNormal.clone().multiply(Radius).add(capCenter); - const topRightPoint = rightNormal.clone().multiply(Radius).add(capCenter); - const bottomLeftPoint = leftNormal.clone().multiply(Radius).add(tailCenter); - const bottomRightPoint = rightNormal.clone().multiply(Radius).add(tailCenter); + const leftNormal = Vector3( + -visibleUpAxisScreenSpace.y, + visibleUpAxisScreenSpace.x, + 0 + ); + const rightNormal = Vector3( + visibleUpAxisScreenSpace.y, + -visibleUpAxisScreenSpace.x, + 0 + ); + const visibleLeftPoint = leftNormal + .clone() + .multiply(Radius) + .add(visibleCapCenter); + const visibleRightPoint = rightNormal + .clone() + .multiply(Radius) + .add(visibleCapCenter); + const hiddenLeftPoint = leftNormal + .clone() + .multiply(Radius) + .add(hiddenCapCenter); + const hiddenRightPoint = rightNormal + .clone() + .multiply(Radius) + .add(hiddenCapCenter); const xAxisRotation = normalToXAxisDegrees(rightNormal.x, rightNormal.y); const largeArcFlag = 0; @@ -113,15 +159,13 @@ export function renderCylinder( "http://www.w3.org/2000/svg", "path" ); - capPath.setAttribute("id", "cylinder-top"); + capPath.setAttribute("id", isTopVisible ? "cylinder-top" : "cylinder-bottom"); const capFill = applyLighting( scene.directionalLight.color, cylinder.fill, scene.ambientLightColor, - isTopVisible - ? reversedLightDirection.dotProduct(yAxisWorldSpace) - : reversedLightDirection.dotProduct(yAxisWorldSpace.clone().multiply(-1)) + reversedLightDirection.dotProduct(visibleUpAxisWorldSpace.clone()) ); capPath.setAttribute("fill", capFill); @@ -131,14 +175,14 @@ export function renderCylinder( capPath.setAttribute( "d", ` - M ${topLeftPoint.x} ${ - topLeftPoint.y + M ${visibleLeftPoint.x} ${ + visibleLeftPoint.y } A ${Radius} ${ShortRadius} ${xAxisRotation} ${largeArcFlag} ${sweepFlag} ${ - topRightPoint.x - } ${topRightPoint.y} + visibleRightPoint.x + } ${visibleRightPoint.y} A ${Radius} ${ShortRadius} ${xAxisRotation} ${1} ${sweepFlag} ${ - topLeftPoint.x - } ${topLeftPoint.y}` + visibleLeftPoint.x + } ${visibleLeftPoint.y}` ); const tubePath = document.createElementNS( @@ -150,10 +194,10 @@ export function renderCylinder( tubePath.setAttribute( "d", ` - M ${topLeftPoint.x} ${topLeftPoint.y} - A ${Radius} ${ShortRadius} ${xAxisRotation} 0 1 ${topRightPoint.x} ${topRightPoint.y} - L ${bottomRightPoint.x} ${bottomRightPoint.y} - A ${Radius} ${ShortRadius} ${xAxisRotation} 0 0 ${bottomLeftPoint.x} ${bottomLeftPoint.y} + M ${visibleLeftPoint.x} ${visibleLeftPoint.y} + A ${Radius} ${ShortRadius} ${xAxisRotation} 0 1 ${visibleRightPoint.x} ${visibleRightPoint.y} + L ${hiddenRightPoint.x} ${hiddenRightPoint.y} + A ${Radius} ${ShortRadius} ${xAxisRotation} 0 0 ${hiddenLeftPoint.x} ${hiddenLeftPoint.y} Z ` ); @@ -184,13 +228,13 @@ export function renderCylinder( // Make the control points of the gradient the center of the cylinder's // just to keep it nice and organized when editing in Figma and such later - const leftOfTubeCenter = topLeftPoint + const leftOfTubeCenter = visibleLeftPoint .clone() - .add(bottomLeftPoint) + .add(hiddenLeftPoint) .multiply(0.5); - const rightOfTubeCenter = topRightPoint + const rightOfTubeCenter = visibleRightPoint .clone() - .add(bottomRightPoint) + .add(hiddenRightPoint) .multiply(0.5); linearGradient.setAttribute("x1", leftOfTubeCenter.x.toString()); @@ -199,13 +243,13 @@ export function renderCylinder( linearGradient.setAttribute("y2", rightOfTubeCenter.y.toString()); const leftEdgeNormal = Vector3(0, 0, 1) - .crossProduct(yAxisCameraSpace) + .crossProduct(visibleUpAxisCameraSpace) .normalize(); const lightingSpace = Matrix4x4().lookAt( Vector3(0, 0, 0), leftEdgeNormal, - yAxisCameraSpace + visibleUpAxisCameraSpace ); // Add the gradient stops diff --git a/workbench/main.ts b/workbench/main.ts index 1ebb03f..407f086 100644 --- a/workbench/main.ts +++ b/workbench/main.ts @@ -13,9 +13,9 @@ import SingleCylinder from "./scenes/SingleCylinder"; // Transforms(); // Octopus(); // Spheres(); -// Cylinders(); +Cylinders(); // SingleSphere(); -SingleCylinder(); +// SingleCylinder(); // Worm(); document diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index 07c004e..190804f 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -33,7 +33,8 @@ export default function () { }); const height = referenceRadius * 4; - const position = Vector3(0, height / 2, 0); + // const position = Vector3(0, height / 2, 0); + const position = Vector3(0, 0, 0); const cylinder = Cylinder({ id: "reference", position, @@ -60,7 +61,7 @@ export default function () { ...getLighting("black and white"), shapes: [ getEnvironment("grid"), - // Axii(Vector3(-referenceRadius * 3, 0, 0)), + Axii(Vector3(-referenceRadius * 3, 0, 0)), // Group({ // position: Vector3(0, 0, 0), // rotation: Vector3(45, 0, 0), @@ -118,6 +119,8 @@ export default function () { document.addEventListener("pointermove", onPointerEvent); document.addEventListener("pointerup", onPointerEvent); + const rotationSpeed = 0.3; + onUpdate(({ now, deltaTime }) => { // const cameraSpeed = 0.1; const cameraSpeed = 0.0; @@ -125,9 +128,9 @@ export default function () { // updateCamera(45, 20); - // cylinder.rotation.x = (now * 90) % 360; + cylinder.rotation.x = (now * 90 * rotationSpeed) % 360; // cylinder.rotation.x = 45; - cylinder.rotation.x = 90; + // cylinder.rotation.x = 90; // cylinder.rotation.y = now * 90; // cylinder.rotation.x = now * 90; From 4c02506a5bc03e68aeb23fb3b5bf1d65551143fc Mon Sep 17 00:00:00 2001 From: Francois Date: Mon, 16 Oct 2023 09:43:09 -0400 Subject: [PATCH 18/20] ... --- src/renderer/renderCylinder.ts | 41 ++---------------------------- src/renderer/renderSphere.ts | 24 ++++++++--------- workbench/main.ts | 4 +-- workbench/scenes/KitchenSink.ts | 2 +- workbench/scenes/SingleCylinder.ts | 2 +- 5 files changed, 18 insertions(+), 55 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 0ed2b35..5fa7a7c 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -4,12 +4,11 @@ // https://observablehq.com/d/011f054fc7eaf966 import { projectToScreenCoordinate } from "../cameras/Camera"; -import { Color, ColorToCSS } from "../colors/Color"; +import { ColorToCSS } from "../colors/Color"; import { applyLighting } from "../lighting/LightingModel"; import { Matrix4x4 } from "../math/Matrix4x4"; import { Vector3 } from "../math/Vector3"; import { CylinderShape } from "../shapes/Shape"; -import { DebugLine2D } from "./DebugRenderer"; import { Scene } from "./Scene"; import { Viewport } from "./Viewport"; @@ -28,7 +27,7 @@ export function renderCylinder( viewport: Viewport, worldTransform: Matrix4x4, cameraZoom: number, - cameraDirection: Vector3, + _cameraDirection: Vector3, inverseCameraMatrix: Matrix4x4, inverseAndProjectionMatrix: Matrix4x4 ) { @@ -112,14 +111,6 @@ export function renderCylinder( ? capsInScreenSpace[CylinderEnds.Bottom] : capsInScreenSpace[CylinderEnds.Top]; - // addCylinderEnd( - // capCenter, - // cylinder.radius, - // dotProduct, - // isTopVisible ? Color(255, 0, 0) : Color(0, 0, 255), - // svg - // ); - const leftNormal = Vector3( -visibleUpAxisScreenSpace.y, visibleUpAxisScreenSpace.x, @@ -343,34 +334,6 @@ function addStrokeAttribute( } } -function addCylinderEnd( - { x, y }: Vector3, - radius: number, - dotProductAbsolute: number, - fill: Color, - svg: SVGElement -) { - // Create a 'circle' element - const circle = document.createElementNS( - "http://www.w3.org/2000/svg", - "ellipse" - ); - - circle.id = "sphere"; - circle.setAttribute("cx", x.toString()); - circle.setAttribute("cy", y.toString()); - - // TODO: Factor in camera projection matrix, this currectly - // ignores all zoom factors. Can we even handle skew with sphere?! - // I don't think we can. - circle.setAttribute("rx", radius.toString()); - circle.setAttribute("ry", (radius * dotProductAbsolute).toString()); - - circle.setAttribute("fill", ColorToCSS(fill)); - - svg.appendChild(circle); -} - function normalToXAxisDegrees(x: number, y: number) { return (Math.atan2(y, x) / Math.PI) * 180; } diff --git a/src/renderer/renderSphere.ts b/src/renderer/renderSphere.ts index 966dc69..9f9fb04 100644 --- a/src/renderer/renderSphere.ts +++ b/src/renderer/renderSphere.ts @@ -21,20 +21,20 @@ function dotProductToDegrees(dotProduct: number) { return angleInDegrees; } -// function normalToDegrees(x: number, z: number) { -// return (Math.atan2(x, z) / Math.PI) * 180; +// // function normalToDegrees(x: number, z: number) { +// // return (Math.atan2(x, z) / Math.PI) * 180; +// // } + +// function normalizeDegrees(degrees: number) { +// let adjustedDegrees = degrees; +// if (adjustedDegrees < 0) { +// adjustedDegrees = 360 + (adjustedDegrees % 360); +// } else { +// adjustedDegrees = adjustedDegrees % 360; +// } +// return adjustedDegrees; // } -function normalizeDegrees(degrees: number) { - let adjustedDegrees = degrees; - if (adjustedDegrees < 0) { - adjustedDegrees = 360 + (adjustedDegrees % 360); - } else { - adjustedDegrees = adjustedDegrees % 360; - } - return adjustedDegrees; -} - function calculateRotationAngle(x: number, y: number) { const angleInRadians = Math.atan2(y, x); // Convert radians to degrees diff --git a/workbench/main.ts b/workbench/main.ts index 407f086..d6fdb50 100644 --- a/workbench/main.ts +++ b/workbench/main.ts @@ -9,11 +9,11 @@ import { getPaused, setPaused } from "./Settings"; import Cylinders from "./scenes/Cylinders"; import SingleCylinder from "./scenes/SingleCylinder"; -// KitchenSink(); +KitchenSink(); // Transforms(); // Octopus(); // Spheres(); -Cylinders(); +// Cylinders(); // SingleSphere(); // SingleCylinder(); // Worm(); diff --git a/workbench/scenes/KitchenSink.ts b/workbench/scenes/KitchenSink.ts index 17027c5..6acbf18 100644 --- a/workbench/scenes/KitchenSink.ts +++ b/workbench/scenes/KitchenSink.ts @@ -344,7 +344,7 @@ export default function () { const cylinderScaleSpeed = 0.25; const cylinderTranslationSpeed = 1; // cylinder.rotation.x = 90; - // cylinder.rotation.z = now * 360 * cylinderRotationSpeed; + cylinder.rotation.z = now * 360 * cylinderRotationSpeed; const boxRotationSpeed = 0.25; // transparentBox.rotation.y = now * 360 * boxRotationSpeed; diff --git a/workbench/scenes/SingleCylinder.ts b/workbench/scenes/SingleCylinder.ts index 190804f..2d470da 100644 --- a/workbench/scenes/SingleCylinder.ts +++ b/workbench/scenes/SingleCylinder.ts @@ -61,7 +61,7 @@ export default function () { ...getLighting("black and white"), shapes: [ getEnvironment("grid"), - Axii(Vector3(-referenceRadius * 3, 0, 0)), + // Axii(Vector3(-referenceRadius * 3, 0, 0)), // Group({ // position: Vector3(0, 0, 0), // rotation: Vector3(45, 0, 0), From 2599f69b72f91ee1be46069b498abe44131e9c95 Mon Sep 17 00:00:00 2001 From: Francois Date: Mon, 16 Oct 2023 10:03:03 -0400 Subject: [PATCH 19/20] Stop cylinder spinning --- workbench/scenes/KitchenSink.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workbench/scenes/KitchenSink.ts b/workbench/scenes/KitchenSink.ts index 6acbf18..17027c5 100644 --- a/workbench/scenes/KitchenSink.ts +++ b/workbench/scenes/KitchenSink.ts @@ -344,7 +344,7 @@ export default function () { const cylinderScaleSpeed = 0.25; const cylinderTranslationSpeed = 1; // cylinder.rotation.x = 90; - cylinder.rotation.z = now * 360 * cylinderRotationSpeed; + // cylinder.rotation.z = now * 360 * cylinderRotationSpeed; const boxRotationSpeed = 0.25; // transparentBox.rotation.y = now * 360 * boxRotationSpeed; From 0ae0b4d80aed18defc2f8ad379e7ea34c84a67eb Mon Sep 17 00:00:00 2001 From: Francois Date: Mon, 16 Oct 2023 13:54:00 -0400 Subject: [PATCH 20/20] Removed all logging --- src/renderer/renderCylinder.ts | 11 ----------- workbench/scenes/KitchenSink.ts | 6 +++--- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/renderer/renderCylinder.ts b/src/renderer/renderCylinder.ts index 5fa7a7c..0a07458 100644 --- a/src/renderer/renderCylinder.ts +++ b/src/renderer/renderCylinder.ts @@ -71,23 +71,12 @@ export function renderCylinder( const dotProduct = cylinderYAxisCameraSpace.dotProduct(Vector3(0, 0, 1)); // This boils down to just taking the z component const dotProductAbsolute = Math.abs(dotProduct); const isTopVisible = dotProduct > 0; - console.log(`isTopVisible: ${isTopVisible}`); const cylinderScale = worldTransform.getScale().x; const cylinderScaleFactor = cylinderScale * cameraZoom; const Radius = cylinder.radius * cylinderScaleFactor; const ShortRadius = Radius * dotProductAbsolute; - console.log( - `scenario: ${isTopVisible ? "top" : "bottom"} - dotProduct: ${dotProduct.toFixed(3)} - yAxisCameraSpace: ${cylinderYAxisCameraSpace.x.toFixed( - 2 - )}, ${cylinderYAxisCameraSpace.y.toFixed( - 2 - )}, ${cylinderYAxisCameraSpace.z.toFixed(2)}` - ); - const visibleUpAxisWorldSpace = isTopVisible ? cylinderYAxisWorldSpace.clone() : cylinderYAxisWorldSpace.clone().multiply(-1); diff --git a/workbench/scenes/KitchenSink.ts b/workbench/scenes/KitchenSink.ts index 17027c5..7a125d3 100644 --- a/workbench/scenes/KitchenSink.ts +++ b/workbench/scenes/KitchenSink.ts @@ -33,12 +33,12 @@ export default function () { // https://www.figma.com/file/735rFnz0E5ib3rq4ha5MMF/Figma-Experiments?type=design&node-id=1312-16&mode=design&t=w03Fbw0ybh430M6y-4 const pathFromFigmaCircle = "M1 0.5C1 0.776142 0.776142 1 0.5 1C0.223858 1 0 0.776142 0 0.5C0 0.223858 0.223858 0 0.5 0C0.776142 0 1 0.223858 1 0.5Z"; - console.log(pathFromFigmaCircle); + // console.log(pathFromFigmaCircle); const pathSegments = svgPathParser(pathFromFigmaCircle, true); - console.log(pathSegments); + // console.log(pathSegments); const svg3DCommands = svgPathToSvg3DCommands(pathSegments); - console.log(svg3DCommands); + // console.log(svg3DCommands); const size = 35; const lightSphere = Sphere({