2 * Simple Framebuffer Gfx/GUI lib
4 * coded by Ketmar // Invisible Vector <ketmar@ketmar.no-ip.org>
5 * Understanding is not required. Only obedience.
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, version 3 of the License ONLY.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 /* *****************************************************************************
20 Anti-Grain Geometry - Version 2.1 Lite
21 Copyright (C) 2002-2003 Maxim Shemanarev (McSeem)
22 D port, additional work: Ketmar Dark
24 Permission to copy, use, modify, sell and distribute this software
25 is granted provided this copyright notice appears in all copies.
26 This software is provided "as is" without express or implied
27 warranty, and with no claim as to its suitability for any purpose.
29 The author gratefully acknowleges the support of David Turner,
30 Robert Wilhelm, and Werner Lemberg - the authors of the FreeType
31 libray - in producing this work. See http://www.freetype.org for details.
33 Initially the rendering algorithm was designed by David Turner and the
34 other authors of the FreeType library - see the above notice. I nearly
35 created a similar renderer, but still I was far from David's work.
36 I completely redesigned the original code and adapted it for Anti-Grain
37 ideas. Two functions - renderLine and renderScanLine are the core of
38 the algorithm - they calculate the exact coverage of each pixel cell
39 of the polygon. I left these functions almost as is, because there's
40 no way to improve the perfection - hats off to David and his group!
42 All other code is very different from the original.
43 ***************************************************************************** */
44 module iv
.egra
.gfx
.aggmini
.core
;
46 //nothrow @safe @nogc:
48 private import iv
.egra
.gfx
.aggmini
: DisableCopyingMixin
;
49 private import iv
.egra
.gfx
.aggmini
.enums
;
50 private import iv
.egra
.gfx
.aggmini
.supmath
;
51 private import iv
.egra
.gfx
.aggmini
.render
;
52 private import iv
.egra
.gfx
.aggmini
.stroker
;
54 private import iv
.egra
.gfx
.base
;
56 //debug private import iv.cmdcon;
58 //version = egra_aggmini_debug_rasta;
61 // ////////////////////////////////////////////////////////////////////////// //
62 // some "fastgfx" backend
63 public struct AGGDrawer
{
65 // added vertex will contain "end poly" command only when `closePoly()`/`endPoly()` was called
66 static struct Vertex
{
68 uint cmd
; // path command
70 this (in float ax
, in float ay
, in uint acmd
) pure nothrow @safe @nogc {
80 SimpleVector
!Vertex vtx
; // reset by `beginPath()`
82 static struct VtxState
{
83 // coords are transformed
84 float startX
= 0.0f, startY
= 0.0f;
85 float lastX
= 0.0f, lastY
= 0.0f;
86 uint lineCmdCount
= 0;
87 // 0: just started/endpoly resed
88 // 1: got moveto, not issued yet
89 // 2: issued moveto and at least one lineto; lineto count+1
90 // last seen untransformed point
91 float utlastX
= 0.0f, utlastY
= 0.0f;
95 // for vertex producer
98 // for rasterising vertex consumer
99 static struct ConsumerState
{
100 float startX
= 0.0f, startY
= 0.0f;
101 float lastX
= 0.0f, lastY
= 0.0f;
102 uint lineCmdCount
= 0;
103 // 0: poly just started
104 // 1: last command was "move to"
105 // 2 and more: number of sequential "line to" commands minus 1
111 float tessTol
= 0.25f;
112 float angleTol
= 0.0f; // 0.0f -- angle tolerance for McSeem Bezier rasterizer
113 float cuspLimit
= 0.0f; // 0 -- cusp limit for McSeem Bezier rasterizer (0: real cusps)
114 int bezierLimit
= 20; // bezier recursion limit for non-AFD tesselators
116 // default tesselator for Bezier curves
117 AGGTesselation tesselator
= AGGTesselation
.DeCasteljauMcSeem
;
118 //AGGTesselation tesselator = AGGTesselation.DeCasteljau;
119 //AGGTesselation tesselator = AGGTesselation.AFD;
121 mixin(DisableCopyingMixin
);
124 ref AGGDrawer
withTransform(DG
) (in auto ref AGGMatrix tmt
, scope DG dg
)
125 if (is(typeof((inout int=0) { DG vp
= void; dg(); })))
127 immutable AGGMatrix old
= transform
;
129 scope(exit
) transform
= old
;
134 nothrow @trusted @nogc:
136 enum distTol
= cast(float)(1.0f/256.0f);
137 enum KAPPA90
= 0.5522847493f; // length proportional to radius of a cubic bezier handle for 90deg arcs
139 // this does some fancy logic
140 void addVtx (float fx
, float fy
, uint cmd
) {
141 pragma(inline
, true);
145 if (vtxState
.lineCmdCount
>= 2) {
147 if (vtxState
.lineCmdCount
> 2 && ptEquals(vtxState
.startX
, vtxState
.startY
, vtxState
.lastX
, vtxState
.lastY
)) {
148 vtx
.add(Vertex(vtxState
.startX
, vtxState
.startY
, PathCommand
.EndPoly|PathFlag
.Close
));
150 vtx
.add(Vertex(vtxState
.startX
, vtxState
.startY
, PathCommand
.EndPoly
));
153 vtxState
.lineCmdCount
= 0;
158 if (isEndPoly(cmd
)) {
159 // if we haven't seen any lines, only moves -- don't bother
160 if (vtxState
.lineCmdCount
>= 2) {
161 // fix command if the poly is acutally closed (because why not?)
162 if (!isClosed(cmd
)) {
163 if (vtxState
.lineCmdCount
> 2 && ptEquals(vtxState
.startX
, vtxState
.startY
, vtxState
.lastX
, vtxState
.lastY
)) {
164 cmd |
= PathFlag
.Close
;
167 // if we've seen only one line so far, it cannot be closed
168 if (vtxState
.lineCmdCount
<= 2) {
169 cmd
&= ~PathFlag
.Close
;
173 if (vtxState
.lineCmdCount
> 2 && isClosed(cmd
) && !ptEquals(vtxState
.startX
, vtxState
.startY
, vtxState
.lastX
, vtxState
.lastY
)) {
174 vtx
.add(Vertex(vtxState
.startX
, vtxState
.startY
, PathCommand
.LineTo
));
175 vtxState
.lastX
= vtxState
.startX
;
176 vtxState
.lastY
= vtxState
.startY
;
178 // don't do "move to" here, it breaks rendering
179 vtx
.add(Vertex(fx
, fy
, cmd
));
181 vtxState
.lineCmdCount
= 0;
185 assert(fx
== fx
&& fy
== fy
); // reject infs and nans
186 vtxState
.utlastX
= fx
;
187 vtxState
.utlastY
= fy
;
189 if (!transform
.isIdentity
) {
190 transform
.point(ref fx
, ref fy
);
191 assert(fx
== fx
&& fy
== fy
); // reject infs and nans
196 if (vtxState
.lineCmdCount
>= 2) {
198 if (vtxState
.lineCmdCount
> 2 && ptEquals(vtxState
.startX
, vtxState
.startY
, vtxState
.lastX
, vtxState
.lastY
)) {
199 vtx
.add(Vertex(vtxState
.startX
, vtxState
.startY
, PathCommand
.EndPoly|PathFlag
.Close
));
201 vtx
.add(Vertex(vtxState
.startX
, vtxState
.startY
, PathCommand
.EndPoly
));
204 vtxState
.startX
= vtxState
.lastX
= fx
;
205 vtxState
.startY
= vtxState
.lastY
= fy
;
206 vtxState
.lineCmdCount
= 1;
207 //vtx.add(fx, fy, cmd); // postponed
213 if (vtxState
.lineCmdCount
>= 2) {
214 // do not add duplicate points
215 if (ptEquals(fx
, fy
, vtxState
.lastX
, vtxState
.lastY
)) {
218 } else if (vtxState
.lineCmdCount
== 0) {
219 // move to the first point if we didn't yet
220 vtx
.add(Vertex(fx
, fy
, PathCommand
.MoveTo
));
221 vtxState
.startX
= fx
;
222 vtxState
.startY
= fy
;
223 vtxState
.lineCmdCount
= 1;
224 } else if (vtxState
.lineCmdCount
== 1) {
225 // move to the first point if we didn't yet
226 vtx
.add(Vertex(vtxState
.startX
, vtxState
.startY
, PathCommand
.MoveTo
));
228 ++vtxState
.lineCmdCount
;
231 vtx
.add(Vertex(fx
, fy
, cmd
));
235 assert(0, "invalid path command");
239 void dumpVertices () {
240 import core
.stdc
.stdio
: stderr
, fprintf
;
241 fprintf(stderr
, "=== VERTEX COUNT: %u ===\n", vtx
.length
);
242 foreach (immutable uint idx
; 0..vtx
.length
) {
243 immutable uint cmd
= vtx
[idx
].cmd
;
244 fprintf(stderr
, " %u: (%g, %g) : 0x%02x ", idx
, vtx
[idx
].x
, vtx
[idx
].y
, cmd
);
245 if (isStop(cmd
)) fprintf(stderr
, "STOP");
246 else if (isMoveTo(cmd
)) fprintf(stderr
, "MOVETO");
247 else if (isLineTo(cmd
)) fprintf(stderr
, "LINETO");
248 else if (!isEndPoly(cmd
)) fprintf(stderr
, "WTF?!");
250 fprintf(stderr
, "ENDPOLY");
251 if (getCloseFlag(cmd
)) fprintf(stderr
, " CLOSE");
252 if (isCW(cmd
)) fprintf(stderr
, " CW");
253 if (isCCW(cmd
)) fprintf(stderr
, " CCW");
255 fprintf(stderr
, "\n");
257 fprintf(stderr
, "-------\n");
262 Contourer mContourer
;
267 // things like "fill rule" doesn't matter here
268 AGGParams paramsContour
;
273 // 0: autodetect; -1: ccw; 1: cw
274 @property void defaultOrientation (in int v
) { pragma(inline
, true); mContourer
.defaultOrientation
= v
; }
275 @property int defaultOrientation () const pure { pragma(inline
, true); return mContourer
.defaultOrientation
; }
277 // 0: autodetect; -1: ccw; 1: cw
278 @property void forcedOrientation (in int v
) { pragma(inline
, true); mContourer
.forcedOrientation
= v
; }
279 @property int forcedOrientation () const pure { pragma(inline
, true); return mContourer
.forcedOrientation
; }
281 @property void flipOrientation (in bool v
) { pragma(inline
, true); mContourer
.flipOrientation
= v
; }
282 @property bool flipOrientation () const pure { pragma(inline
, true); return mContourer
.flipOrientation
; }
285 void resetDashes () { pragma(inline
, true); mDasher
.removeAllDashes(); }
286 void addDash (in float dashLen
, in float gapLen
) { pragma(inline
, true); mDasher
.addDash(dashLen
, gapLen
); }
287 void dashStart (in float ds) { pragma(inline
, true); mDasher
.dashStart(ds); }
290 @property float currX () const pure { pragma(inline
, true); return vtxState
.utlastX
; }
291 @property float currY () const pure { pragma(inline
, true); return vtxState
.utlastY
; }
294 @property float realCurrX () const pure { pragma(inline
, true); return vtxState
.lastX
; }
295 @property float realCurrY () const pure { pragma(inline
, true); return vtxState
.lastY
; }
297 // returns current rasterized bounds
298 // rasterization is done by `fill()`, `stroke()`, and so on
299 @property GxRect
rasterBounds () const pure { pragma(inline
, true); return GxRect(rast
.minX
, rast
.minY
, rast
.maxX
-rast
.minX
+1, rast
.maxY
-rast
.minY
+1); }
301 @property int rasterMinX () const pure { pragma(inline
, true); return rast
.minX
; }
302 @property int rasterMinY () const pure { pragma(inline
, true); return rast
.minY
; }
303 @property int rasterMaxX () const pure { pragma(inline
, true); return rast
.maxX
; }
304 @property int rasterMaxY () const pure { pragma(inline
, true); return rast
.maxY
; }
306 void resetTransform () { pragma(inline
, true); transform
.identity(); }
309 // ////////////////////////////////////////////////////////////////////////// //
310 // Vetex Producer API
312 pragma(inline
, true);
316 uint vertex (float* x
, float* y
) {
317 if (vpIdx
>= vtx
.length
) return PathCommand
.Stop
;
320 return vtx
[vpIdx
++].cmd
;
324 // ////////////////////////////////////////////////////////////////////////// //
325 // Vetex Consumer API does rasterising
327 pragma(inline
, true);
329 version(egra_aggmini_debug_rasta
) { import core
.stdc
.stdio
: stderr
, fprintf
; fprintf(stderr
, "=== DRAWER: RENDER RESET ===\n"); }
332 void addVertex (float x
, float y
, uint cmd
) {
336 version(egra_aggmini_debug_rasta
) { import core
.stdc
.stdio
: stderr
, fprintf
; fprintf(stderr
, "=== DRAWER: RENDER STOP ===\n"); }
342 if (isLineTo(cmd
) ||
isMoveTo(cmd
)) {
343 version(egra_aggmini_debug_rasta
) {
344 import core
.stdc
.stdio
: stderr
, fprintf
; fprintf(stderr
, " pre*: %s: (%g, %g) lineCmdCount=%u; start=(%g,%g); last=(%g,%g)\n",
345 (isLineTo(cmd
) ?
"lineto".ptr
: "moveto".ptr
), x
, y
, rcsm
.lineCmdCount
, rcsm
.startX
, rcsm
.startY
, rcsm
.lastX
, rcsm
.lastY
);
347 if (!rcsm
.lineCmdCount
) {
348 // just in case: "lineTo" w/o "moveTo"
349 // this can happen on startup, of after poly flush
350 // therefore, it should be safe to do this here
351 if (isLineTo(cmd
)) rast
.moveTo(x
, y
);
354 rcsm
.lineCmdCount
= 1;
357 // do not add duplicate points
358 if (rcsm
.lineCmdCount
< 2 ||
!ptEquals(x
, y
, rcsm
.lastX
, rcsm
.lastY
)) rast
.lineTo(x
, y
);
362 rcsm
.lineCmdCount
= 1;
366 version(egra_aggmini_debug_rasta
) {
367 import core
.stdc
.stdio
: stderr
, fprintf
; fprintf(stderr
, " post: %s: (%g, %g) lineCmdCount=%u; start=(%g,%g); last=(%g,%g)\n",
368 (isLineTo(cmd
) ?
"lineto".ptr
: "moveto".ptr
), x
, y
, rcsm
.lineCmdCount
, rcsm
.startX
, rcsm
.startY
, rcsm
.lastX
, rcsm
.lastY
);
374 if (isEndPoly(cmd
)) {
375 version(egra_aggmini_debug_rasta
) {
376 import core
.stdc
.stdio
: stderr
, fprintf
; fprintf(stderr
, " pre*: %s: (%g, %g) lineCmdCount=%u; start=(%g,%g); last=(%g,%g)\n",
377 (isClosed(cmd
) ?
"close".ptr
: "end".ptr
), x
, y
, rcsm
.lineCmdCount
, rcsm
.startX
, rcsm
.startY
, rcsm
.lastX
, rcsm
.lastY
);
380 if (rcsm
.lineCmdCount
> 2 && isClosed(cmd
) && !ptEquals(rcsm
.startX
, rcsm
.startY
, rcsm
.lastX
, rcsm
.lastY
)) {
381 rast
.lineTo(rcsm
.startX
, rcsm
.startY
);
382 rcsm
.lastX
= rcsm
.startX
;
383 rcsm
.lastY
= rcsm
.startY
;
385 rcsm
.lineCmdCount
= 0;
386 // don't do "move to" here, it breaks rendering
387 version(egra_aggmini_debug_rasta
) {
388 import core
.stdc
.stdio
: stderr
, fprintf
; fprintf(stderr
, " post: %s: (%g, %g) lineCmdCount=%u; start=(%g,%g); last=(%g,%g)\n",
389 (isClosed(cmd
) ?
"close".ptr
: "end".ptr
), x
, y
, rcsm
.lineCmdCount
, rcsm
.startX
, rcsm
.startY
, rcsm
.lastX
, rcsm
.lastY
);
394 assert(0, "invalid path command");
398 // ////////////////////////////////////////////////////////////////////////// //
399 ref AGGDrawer
resetParams () {
400 params
= params
.init
;
404 ref AGGDrawer
beginFrame () {
408 vtxState
= vtxState
.init
;
410 return resetParams();
413 ref AGGDrawer
cancelFrame () {
417 // this doesn't reset params or transform
418 ref AGGDrawer
resetFrame () {
421 vtxState
= vtxState
.init
;
426 // this renders accumulated pathes, and clears everything
427 ref AGGDrawer
endFrame (in GxColor c
=gxTransparent
) {
432 // input coords are unaffected by transform
433 // returns alpha (0 means "no hit")
434 // WARNING! should be called before/instead of `render()`!
435 // WARNING! clipped only by the framebuffer
436 ubyte hitTest (in FillRule aFillRule
, in int x
, in int y
) {
437 pragma(inline
, true);
438 rast
.fillRule
= aFillRule
;
439 return rast
.hitTest(x
, y
);
442 // input coords are unaffected by transform
443 // returns alpha (0 means "no hit")
444 // WARNING! should be called before/instead of `render()`!
445 // WARNING! clipped only by the framebuffer
446 ubyte hitTest (in int x
, in int y
) { pragma(inline
, true); return hitTest(params
.fillRule
, x
, y
); }
448 // doesn't reset pathes
449 // this can be called several times with different colors
450 ref AGGDrawer
render(SG
) (in FillRule aFillRule
, auto ref SG spangen
) if (AGGIsGoodSpanGen
!SG
) {
451 static if (AGGIsGoodSingleColor
!SG
) {
452 if (gxIsTransparent(spangen
)) { rast
.reset(); return this; }
454 GxRect clipRect
= gxClipRect
;
455 if (clipRect
.intersect(0, 0, VBufWidth
, VBufHeight
)) {
456 // yeah, fill rule matters only at this stage
457 rast
.fillRule
= aFillRule
;
458 rast
.render(clipRect
, spangen
);
464 // doesn't reset pathes
465 // this can be called several times with different colors
466 ref AGGDrawer
render(SG
) (auto ref SG spangen
) if (AGGIsGoodSpanGen
!SG
) {
467 pragma(inline
, true);
468 return render(params
.fillRule
, spangen
);
478 ref AGGDrawer
beginPath () {
479 pragma(inline
, true);
484 // end polygon without closing
485 ref AGGDrawer
endPoly () {
486 addVtx(vtxState
.lastX
, vtxState
.lastY
, PathCommand
.EndPoly
);
490 // end and close polygon
491 // contourer will autodetect orientation to make the "outer" contoue
492 ref AGGDrawer
closePoly () {
493 addVtx(vtxState
.lastX
, vtxState
.lastY
, PathCommand
.EndPoly|PathFlag
.Close
);
497 // end and close polygon
498 // this can be used to tell the contourer what contour we want
499 // if the orientation is different from the real one, contourer will create the "inner" contour
500 ref AGGDrawer
closePolyCCW () {
501 addVtx(vtxState
.lastX
, vtxState
.lastY
, PathCommand
.EndPoly|PathFlag
.Close|PathFlag
.CCW
);
505 // end and close polygon
506 // this can be used to tell the contourer what contour we want
507 // if the orientation is different from the real one, contourer will create the "inner" contour
508 ref AGGDrawer
closePolyCW () {
509 addVtx(vtxState
.lastX
, vtxState
.lastY
, PathCommand
.EndPoly|PathFlag
.Close|PathFlag
.CW
);
514 ref AGGDrawer
noop () pure { pragma(inline
, true); return this; }
516 // starts new sub-path with specified point as first point
517 ref AGGDrawer
moveTo (in float x
, in float y
) { pragma(inline
, true); addVtx(x
, y
, PathCommand
.MoveTo
); return this; }
519 // adds line segment from the last point in the path to the specified point
520 ref AGGDrawer
lineTo (in float x
, in float y
) { pragma(inline
, true); addVtx(x
, y
, PathCommand
.LineTo
); return this; }
522 // adds cubic bezier segment from last point in the path via two control points to the specified point
523 ref AGGDrawer
bezierTo (in float x2
, in float y2
, in float x3
, in float y3
, in float x4
, in float y4
) {
524 pragma(inline
, true);
525 tesselateBezier(currX
, currY
, x2
, y2
, x3
, y3
, x4
, y4
);
529 // adds quadratic bezier segment from last point in the path via a control point to the specified point
530 ref AGGDrawer
quadTo (in float cx
, in float cy
, in float x
, in float y
) {
531 immutable float x0
= currX
;
532 immutable float y0
= currY
;
534 x0
+2.0f/3.0f*(cx
-x0
), y0
+2.0f/3.0f*(cy
-y0
),
535 x
+2.0f/3.0f*(cx
-x
), y
+2.0f/3.0f*(cy
-y
),
540 // adds an arc segment at the corner defined by the last path point, and two specified points
541 ref AGGDrawer
arcTo (in float x1
, in float y1
, in float x2
, in float y2
, in float radius
) {
542 import core
.stdc
.math
: acosf
, tanf
, atan2f
;
544 immutable float x0
= currX
;
545 immutable float y0
= currY
;
547 // handle degenerate cases
548 if (ptEquals(x0
, y0
, x1
, y1
) ||
549 ptEquals(x1
, y1
, x2
, y2
) ||
550 distPtSegSq(x1
, y1
, x0
, y0
, x2
, y2
) < distTol
*distTol ||
557 // calculate tangential circle to lines (x0, y0)-(x1, y1) and (x1, y1)-(x2, y2)
562 normalize(ref dx0
, ref dy0
);
563 normalize(ref dx1
, ref dy1
);
564 immutable float a
= acosf(dx0
*dx1
+dy0
*dy1
);
565 immutable float d
= radius
/tanf(a
*0.5f);
572 float cx
= void, cy
= void, a0
= void, a1
= void;
574 if (cross2(dx0
, dy0
, dx1
, dy1
) > 0.0f) {
575 cx
= x1
+dx0
*d
+dy0
*radius
;
576 cy
= y1
+dy0
*d
+-dx0
*radius
;
577 a0
= atan2f(dx0
, -dy0
);
578 a1
= atan2f(-dx1
, dy1
);
581 cx
= x1
+dx0
*d
+-dy0
*radius
;
582 cy
= y1
+dy0
*d
+dx0
*radius
;
583 a0
= atan2f(-dx0
, dy0
);
584 a1
= atan2f(dx1
, -dy1
);
588 return arc
!"line"(dir
, cx
, cy
, radius
, a0
, a1
); // first is line
591 /* Creates new circle arc shaped sub-path. The arc center is at (cx, cy), the arc radius is r,
592 * and the arc is drawn from angle a0 to a1, and swept in direction dir (Winding.CCW, or Winding.CW).
593 * Angles are specified in radians.
595 * [mode] is: "move", "line" -- first command will be like original NanoVega, MoveTo, or LineTo
597 ref AGGDrawer
arc(string mode
="move") (Winding dir
, in float cx
, in float cy
, in float r
,
598 in float a0
, in float a1
)
600 static assert(mode
== "move" || mode
== "line");
601 import core
.stdc
.math
: fabsf
, cosf
, sinf
;
606 if (dir
== Winding
.CW
) {
607 if (fabsf(da) >= FLT_PI
*2.0f) {
610 while (da < 0.0f) da += FLT_PI
*2.0f;
613 if (fabsf(da) >= FLT_PI
*2.0f) {
616 while (da > 0.0f) da -= FLT_PI
*2.0f;
620 // split arc into max 90 degree segments
621 immutable int ndivs
= max(1, min(cast(int)(fabsf(da)/(FLT_PI
*0.5f)+0.5f), 5));
622 immutable float hda
= (da/cast(float)ndivs
)*0.5f;
623 float kappa
= fabsf(4.0f/3.0f*(1.0f-cosf(hda
))/sinf(hda
));
624 if (dir
== Winding
.CCW
) kappa
= -kappa
;
627 float px
= 0, py
= 0, ptanx
= 0, ptany
= 0;
628 foreach (int i
; 0..ndivs
+1) {
629 immutable float a
= a0
+da*(i
/cast(float)ndivs
);
630 immutable float dx
= cosf(a
);
631 immutable float dy
= sinf(a
);
632 immutable float x
= cx
+dx
*r
;
633 immutable float y
= cy
+dy
*r
;
634 immutable float tanx
= -dy
*r
*kappa
;
635 immutable float tany
= dx
*r
*kappa
;
638 static if (mode
== "move") moveTo(x
, y
); else lineTo(x
, y
);
640 bezierTo(px
+ptanx
, py
+ptany
, x
-tanx
, y
-tany
, x
, y
);
651 // creates new rectangle shaped sub-path
652 ref AGGDrawer
rect (in float x
, in float y
, in float w
, in float h
) {
663 // creates new rounded rectangle shaped sub-path
664 ref AGGDrawer
roundedRect (in float x
, in float y
, in float w
, in float h
, in float radius
) {
665 return roundedRectVarying(x
, y
, w
, h
, radius
, radius
, radius
, radius
);
668 // creates new rounded rectangle shaped sub-path
669 // specify ellipse width and height to round corners according to it
670 ref AGGDrawer
roundedRectEllipse (in float x
, in float y
, in float w
, in float h
, in float rw
, in float rh
) {
671 if (rw
< 0.1f || rh
< 0.1f) return rect(x
, y
, w
, h
);
674 bezierTo(x
+w
-rw
*(1.0f-KAPPA90
), y
, x
+w
, y
+rh
*(1.0f-KAPPA90
), x
+w
, y
+rh
);
676 bezierTo(x
+w
, y
+h
-rh
*(1.0f-KAPPA90
), x
+w
-rw
*(1.0f-KAPPA90
), y
+h
, x
+w
-rw
, y
+h
);
678 bezierTo(x
+rw
*(1.0f-KAPPA90
), y
+h
, x
, y
+h
-rh
*(1.0f-KAPPA90
), x
, y
+h
-rh
);
680 bezierTo(x
, y
+rh
*(1.0f-KAPPA90
), x
+rw
*(1.0f-KAPPA90
), y
, x
+rw
, y
);
684 // creates new rounded rectangle shaped sub-path
685 // this one allows you to specify different rounding radii for each corner
686 ref AGGDrawer
roundedRectVarying (in float x
, in float y
, in float w
, in float h
,
687 in float radTopLeft
, in float radTopRight
,
688 in float radBottomRight
, in float radBottomLeft
)
690 import core
.stdc
.math
: fabsf
;
691 if (radTopLeft
< 0.1f && radTopRight
< 0.1f && radBottomRight
< 0.1f && radBottomLeft
< 0.1f) return rect(x
, y
, w
, h
);
692 immutable float halfw
= fabsf(w
)*0.5f;
693 immutable float halfh
= fabsf(h
)*0.5f;
694 immutable float rxBL
= min(radBottomLeft
, halfw
)*sign(w
), ryBL
= min(radBottomLeft
, halfh
)*sign(h
);
695 immutable float rxBR
= min(radBottomRight
, halfw
)*sign(w
), ryBR
= min(radBottomRight
, halfh
)*sign(h
);
696 immutable float rxTR
= min(radTopRight
, halfw
)*sign(w
), ryTR
= min(radTopRight
, halfh
)*sign(h
);
697 immutable float rxTL
= min(radTopLeft
, halfw
)*sign(w
), ryTL
= min(radTopLeft
, halfh
)*sign(h
);
700 bezierTo(x
, y
+h
-ryBL
*(1.0f-KAPPA90
), x
+rxBL
*(1.0f-KAPPA90
), y
+h
, x
+rxBL
, y
+h
);
701 lineTo(x
+w
-rxBR
, y
+h
);
702 bezierTo(x
+w
-rxBR
*(1.0f-KAPPA90
), y
+h
, x
+w
, y
+h
-ryBR
*(1.0f-KAPPA90
), x
+w
, y
+h
-ryBR
);
704 bezierTo(x
+w
, y
+ryTR
*(1.0f-KAPPA90
), x
+w
-rxTR
*(1.0f-KAPPA90
), y
, x
+w
-rxTR
, y
);
706 bezierTo(x
+rxTL
*(1.0f-KAPPA90
), y
, x
, y
+ryTL
*(1.0f-KAPPA90
), x
, y
+ryTL
);
710 // creates new ellipse shaped sub-path
711 ref AGGDrawer
ellipse (in float cx
, in float cy
, in float rx
, in float ry
) {
713 bezierTo(cx
-rx
, cy
+ry
*KAPPA90
, cx
-rx
*KAPPA90
, cy
+ry
, cx
, cy
+ry
);
714 bezierTo(cx
+rx
*KAPPA90
, cy
+ry
, cx
+rx
, cy
+ry
*KAPPA90
, cx
+rx
, cy
);
715 bezierTo(cx
+rx
, cy
-ry
*KAPPA90
, cx
+rx
*KAPPA90
, cy
-ry
, cx
, cy
-ry
);
716 bezierTo(cx
-rx
*KAPPA90
, cy
-ry
, cx
-rx
, cy
-ry
*KAPPA90
, cx
-rx
, cy
);
720 // creates new circle shaped sub-path
721 ref AGGDrawer
circle (in float cx
, in float cy
, in float r
) {
722 return ellipse(cx
, cy
, r
, r
);
726 // ////////////////////////////////////////////////////////////////////////// //
727 protected void renderStroker () {
728 // no need to close polys, our consumer will do it
729 streamAllVertices
!false(mStroker
, this);
730 mStroker
.removeAll();
733 protected void streamToStrokerAndRender(VS
) (ref VS vs
) if (IsGoodVertexProducer
!VS
) {
734 streamAllVertices(vs
, mStroker
, &renderStroker
);
738 // ////////////////////////////////////////////////////////////////////////// //
740 ref AGGDrawer
fill () {
741 streamAllVertices
!false(this, this); // no need to close polys, our consumer will do it
747 ref AGGDrawer
stroke() (in auto ref AGGParams parm
) {
748 if (vtx
.isEmpty
) return this;
749 mStroker
.setFromParams(parm
);
750 streamAllVertices(this, mStroker
, &renderStroker
);
756 ref AGGDrawer
stroke () { pragma(inline
, true); return stroke(params
); }
759 ref AGGDrawer
contour() (in auto ref AGGParams ctrparm
, in auto ref AGGParams stkparm
) {
760 if (vtx
.isEmpty
) return this;
761 mContourer
.setFromParams(ctrparm
);
762 mStroker
.setFromParams(stkparm
);
763 streamAllVertices(this, mContourer
, &streamToStrokerAndRender
!(typeof(mContourer
)));
769 ref AGGDrawer
contour () { pragma(inline
, true); return contour(paramsContour
, params
); }
771 // filled contour pathes (doesn't work right, DO NOT USE!)
772 ref AGGDrawer
contourFill() (in auto ref AGGParams ctrparm
) {
773 if (vtx
.isEmpty
) return this;
774 mContourer
.setFromParams(ctrparm
);
775 streamAllVertices(this, mContourer
, { streamAllVertices
!false(mContourer
, this); });
776 mContourer
.removeAll();
781 // fulled contour pathes (doesn't work right, DO NOT USE!)
782 ref AGGDrawer
contourFill () { pragma(inline
, true); return contourFill(paramsContour
); }
785 ref AGGDrawer
dashStroke() (in auto ref AGGParams parm
) {
786 if (vtx
.isEmpty
) return this;
787 if (!mDasher
.hasDashes
) return stroke(parm
);
788 mDasher
.shorten
= parm
.shorten
;
789 mStroker
.setFromParams(parm
);
790 streamAllVertices(this, mDasher
, &streamToStrokerAndRender
!(typeof(mDasher
)));
796 ref AGGDrawer
dashStroke () { pragma(inline
, true); return dashStroke(params
); }
799 // from top to bottom
800 AGGVGradient3
vgradient (in GxColor c0
, in GxColor c1
) {
801 pragma(inline
, true);
802 return AGGVGradient3(rasterMinY
, c0
, rasterMaxY
, c1
);
806 // ////////////////////////////////////////////////////////////////////////// //
807 void tesselateBezierDCj (in float x1
, in float y1
, in float x2
, in float y2
,
808 in float x3
, in float y3
, in float x4
, in float y4
, in int level
)
810 import core
.stdc
.math
: fabsf
;
811 if (level
> bezierLimit
) return;
813 immutable float x12
= (x1
+x2
)*0.5f;
814 immutable float y12
= (y1
+y2
)*0.5f;
815 immutable float x23
= (x2
+x3
)*0.5f;
816 immutable float y23
= (y2
+y3
)*0.5f;
817 immutable float x34
= (x3
+x4
)*0.5f;
818 immutable float y34
= (y3
+y4
)*0.5f;
819 immutable float x123
= (x12
+x23
)*0.5f;
820 immutable float y123
= (y12
+y23
)*0.5f;
822 immutable float dx
= x4
-x1
;
823 immutable float dy
= y4
-y1
;
824 immutable float d2
= fabsf(((x2
-x4
)*dy
-(y2
-y4
)*dx
));
825 immutable float d3
= fabsf(((x3
-x4
)*dy
-(y3
-y4
)*dx
));
827 if ((d2
+d3
)*(d2
+d3
) < tessTol
*(dx
*dx
+dy
*dy
)) {
832 immutable float x234
= (x23
+x34
)*0.5f;
833 immutable float y234
= (y23
+y34
)*0.5f;
834 immutable float x1234
= (x123
+x234
)*0.5f;
835 immutable float y1234
= (y123
+y234
)*0.5f;
837 // "taxicab" / "manhattan" check for flat curves
838 if (fabsf(x1
+x3
-x2
-x2
)+fabsf(y1
+y3
-y2
-y2
)+fabsf(x2
+x4
-x3
-x3
)+fabsf(y2
+y4
-y3
-y3
) < tessTol
*0.25f) {
839 lineTo(x1234
, y1234
);
843 tesselateBezierDCj(x1
, y1
, x12
, y12
, x123
, y123
, x1234
, y1234
, level
+1);
844 tesselateBezierDCj(x1234
, y1234
, x234
, y234
, x34
, y34
, x4
, y4
, level
+1);
847 // ////////////////////////////////////////////////////////////////////////// //
848 // based on the ideas and code of Maxim Shemanarev. Rest in Peace, bro!
849 // see http://www.antigrain.com/research/adaptive_bezier/index.html
850 void tesselateBezierMcSeem (in float x1
, in float y1
, in float x2
, in float y2
,
851 in float x3
, in float y3
, in float x4
, in float y4
, in int level
)
853 import core
.stdc
.math
: fabsf
, atan2f
;
855 enum CollinearEPS
= 0.00000001f; // 0.00001f;
856 enum AngleTolEPS
= 0.01f;
858 static float distSquared (in float x1
, in float y1
, in float x2
, in float y2
) pure nothrow @safe @nogc {
859 pragma(inline
, true);
860 immutable float dx
= x2
-x1
;
861 immutable float dy
= y2
-y1
;
867 lineTo(x1, y1/*, 0*/);
868 tesselateBezierMcSeem(x1, y1, x2, y2, x3, y3, x4, y4, 1/*, type*/);
869 lineTo(x4, y4/*, type*/);
874 if (level
> bezierLimit
) return; // recurse limit; practically, it should be never reached, but...
876 // calculate all the mid-points of the line segments
877 immutable float x12
= (x1
+x2
)*0.5f;
878 immutable float y12
= (y1
+y2
)*0.5f;
879 immutable float x23
= (x2
+x3
)*0.5f;
880 immutable float y23
= (y2
+y3
)*0.5f;
881 immutable float x34
= (x3
+x4
)*0.5f;
882 immutable float y34
= (y3
+y4
)*0.5f;
883 immutable float x123
= (x12
+x23
)*0.5f;
884 immutable float y123
= (y12
+y23
)*0.5f;
885 immutable float x234
= (x23
+x34
)*0.5f;
886 immutable float y234
= (y23
+y34
)*0.5f;
887 immutable float x1234
= (x123
+x234
)*0.5f;
888 immutable float y1234
= (y123
+y234
)*0.5f;
890 // try to approximate the full cubic curve by a single straight line
891 immutable float dx
= x4
-x1
;
892 immutable float dy
= y4
-y1
;
894 float d2
= fabsf(((x2
-x4
)*dy
-(y2
-y4
)*dx
));
895 float d3
= fabsf(((x3
-x4
)*dy
-(y3
-y4
)*dx
));
897 final switch ((cast(int)(d2
> CollinearEPS
)<<1)+cast(int)(d3
> CollinearEPS
)) {
899 // all collinear or p1 == p4
900 float k
= dx
*dx
+dy
*dy
;
902 d2
= distSquared(x1
, y1
, x2
, y2
);
903 d3
= distSquared(x4
, y4
, x3
, y3
);
908 d2
= k
*(da1
*dx
+da2
*dy
);
911 d3
= k
*(da1
*dx
+da2
*dy
);
912 if (d2
> 0 && d2
< 1 && d3
> 0 && d3
< 1) {
913 // Simple collinear case, 1---2---3---4
914 // We can leave just two endpoints
917 if (d2
<= 0.0f) d2
= distSquared(x2
, y2
, x1
, y1
);
918 else if (d2
>= 1.0f) d2
= distSquared(x2
, y2
, x4
, y4
);
919 else d2
= distSquared(x2
, y2
, x1
+d2
*dx
, y1
+d2
*dy
);
921 if (d3
<= 0.0f) d3
= distSquared(x3
, y3
, x1
, y1
);
922 else if (d3
>= 1.0f) d3
= distSquared(x3
, y3
, x4
, y4
);
923 else d3
= distSquared(x3
, y3
, x1
+d3
*dx
, y1
+d3
*dy
);
930 } else if (d3
< tessTol
) {
936 // p1,p2,p4 are collinear, p3 is significant
937 if (d3
*d3
<= tessTol
*(dx
*dx
+dy
*dy
)) {
938 if (angleTol
< AngleTolEPS
) {
943 float da1
= fabsf(atan2f(y4
-y3
, x4
-x3
)-atan2f(y3
-y2
, x3
-x2
));
944 if (da1
>= FLT_PI
) da1
= 2.0f*FLT_PI
-da1
;
945 if (da1
< angleTol
) {
950 if (cuspLimit
!= 0.0f) {
951 if (da1
> cuspLimit
) {
960 // p1,p3,p4 are collinear, p2 is significant
961 if (d2
*d2
<= tessTol
*(dx
*dx
+dy
*dy
)) {
962 if (angleTol
< AngleTolEPS
) {
967 float da1
= fabsf(atan2f(y3
-y2
, x3
-x2
)-atan2f(y2
-y1
, x2
-x1
));
968 if (da1
>= FLT_PI
) da1
= 2.0f*FLT_PI
-da1
;
969 if (da1
< angleTol
) {
974 if (cuspLimit
!= 0.0f) {
975 if (da1
> cuspLimit
) {
985 if ((d2
+d3
)*(d2
+d3
) <= tessTol
*(dx
*dx
+dy
*dy
)) {
986 // if the curvature doesn't exceed the distance tolerance value, we tend to finish subdivisions
987 if (angleTol
< AngleTolEPS
) {
991 // angle and cusp condition
992 immutable float k
= atan2f(y3
-y2
, x3
-x2
);
993 float da1
= fabsf(k
-atan2f(y2
-y1
, x2
-x1
));
994 float da2
= fabsf(atan2f(y4
-y3
, x4
-x3
)-k
);
995 if (da1
>= FLT_PI
) da1
= 2.0f*FLT_PI
-da1
;
996 if (da2
>= FLT_PI
) da2
= 2.0f*FLT_PI
-da2
;
997 if (da1
+da2
< angleTol
) {
998 // finally we can stop the recursion
1002 if (cuspLimit
!= 0.0f) {
1003 if (da1
> cuspLimit
) {
1007 if (da2
> cuspLimit
) {
1017 // continue subdivision
1018 tesselateBezierMcSeem(x1
, y1
, x12
, y12
, x123
, y123
, x1234
, y1234
, level
+1);
1019 tesselateBezierMcSeem(x1234
, y1234
, x234
, y234
, x34
, y34
, x4
, y4
, level
+1);
1022 // Adaptive forward differencing for bezier tesselation.
1023 // See Lien, Sheue-Ling, Michael Shantz, and Vaughan Pratt.
1024 // "Adaptive forward differencing for rendering curves and surfaces."
1025 // ACM SIGGRAPH Computer Graphics. Vol. 21. No. 4. ACM, 1987.
1026 // original code by Taylor Holliday <taylor@audulus.com>
1027 void tesselateBezierAFD (in float x1
, in float y1
, in float x2
, in float y2
,
1028 in float x3
, in float y3
, in float x4
, in float y4
)
1030 enum AFD_ONE
= (1<<10);
1033 immutable float ax
= -x1
+3*x2
-3*x3
+x4
;
1034 immutable float ay
= -y1
+3*y2
-3*y3
+y4
;
1035 immutable float bx
= 3*x1
-6*x2
+3*x3
;
1036 immutable float by
= 3*y1
-6*y2
+3*y3
;
1037 immutable float cx
= -3*x1
+3*x2
;
1038 immutable float cy
= -3*y1
+3*y2
;
1040 // Transform to forward difference basis (stepsize 1)
1043 float dx
= ax
+bx
+cx
;
1044 float dy
= ay
+by
+cy
;
1045 float ddx
= 6*ax
+2*bx
;
1046 float ddy
= 6*ay
+2*by
;
1050 //printf("dx: %f, dy: %f\n", dx, dy);
1051 //printf("ddx: %f, ddy: %f\n", ddx, ddy);
1052 //printf("dddx: %f, dddy: %f\n", dddx, dddy);
1057 immutable float tol
= tessTol
*4.0f;
1059 while (t
< AFD_ONE
) {
1060 // Flatness measure.
1061 float d
= ddx
*ddx
+ddy
*ddy
+dddx
*dddx
+dddy
*dddy
;
1063 // printf("d: %f, th: %f\n", d, th);
1065 // Go to higher resolution if we're moving a lot or overshooting the end.
1066 while ((d
> tol
&& dt > 1) ||
(t
+dt > AFD_ONE
)) {
1069 // Apply L to the curve. Increase curve resolution.
1070 dx
= 0.5f*dx
-(1.0f/8.0f)*ddx
+(1.0f/16.0f)*dddx
;
1071 dy
= 0.5f*dy
-(1.0f/8.0f)*ddy
+(1.0f/16.0f)*dddy
;
1072 ddx
= (1.0f/4.0f)*ddx
-(1.0f/8.0f)*dddx
;
1073 ddy
= (1.0f/4.0f)*ddy
-(1.0f/8.0f)*dddy
;
1074 dddx
= (1.0f/8.0f)*dddx
;
1075 dddy
= (1.0f/8.0f)*dddy
;
1077 // Half the stepsize.
1081 d
= ddx
*ddx
+ddy
*ddy
+dddx
*dddx
+dddy
*dddy
;
1084 // Go to lower resolution if we're really flat
1085 // and we aren't going to overshoot the end.
1086 // XXX: tol/32 is just a guess for when we are too flat.
1087 while ((d
> 0 && d
< tol
/32.0f && dt < AFD_ONE
) && (t
+2*dt <= AFD_ONE
)) {
1088 // printf("down\n");
1090 // Apply L^(-1) to the curve. Decrease curve resolution.
1098 // Double the stepsize.
1102 d
= ddx
*ddx
+ddy
*ddy
+dddx
*dddx
+dddy
*dddy
;
1105 // Forward differencing.
1114 lineTo(px
, py
/*, (t > 0 ? type : 0)*/);
1116 // Advance along the curve.
1119 // Ensure we don't overshoot.
1120 assert(t
<= AFD_ONE
);
1125 public void tesselateBezier (in float x1
, in float y1
, in float x2
, in float y2
,
1126 in float x3
, in float y3
, in float x4
, in float y4
)
1128 final switch (tesselator
) with (AGGTesselation
) {
1130 tesselateBezierDCj(x1
, y1
, x2
, y2
, x3
, y3
, x4
, y4
, 0);
1133 tesselateBezierAFD(x1
, y1
, x2
, y2
, x3
, y3
, x4
, y4
);
1135 case DeCasteljauMcSeem
:
1137 tesselateBezierMcSeem(x1
, y1
, x2
, y2
, x3
, y3
, x4
, y4
, 1);
1143 // ////////////////////////////////////////////////////////////////////////// //
1144 public enum BaphometDims
= 512; // [0..511]
1145 private enum baph_debug_time
= false;
1146 private enum baph_debug_dump
= false;
1147 public void renderBaphomet (float ofsx
=0.0f, float ofsy
=0.0f, float scalex
=1.0f, float scaley
=1.0f) {
1148 auto path
= cast(const(ubyte)[])baphometPath
;
1149 immutable plen
= path
.length
;
1153 Bounds
, // always first, has 4 args (x0, y0, x1, y1)
1161 CubicTo
, // cubic bezier
1165 Command
getCommand () nothrow @trusted @nogc {
1166 if (ppos
>= plen
) assert(0, "invalid path");
1167 return cast(Command
)(path
.ptr
[ppos
++]);
1170 float getFloat () nothrow @trusted @nogc {
1171 if (ppos
>= plen || plen
-ppos
< float.sizeof
) assert(0, "invalid path");
1172 version(LittleEndian
) {
1173 float res
= *cast(const(float)*)(&path
.ptr
[ppos
]);
1174 ppos
+= cast(uint)float.sizeof
;
1177 static assert(float.sizeof
== 4);
1178 uint xp
= path
.ptr
[ppos
]|
(path
.ptr
[ppos
+1]<<8)|
(path
.ptr
[ppos
+2]<<16)|
(path
.ptr
[ppos
+3]<<24);
1179 ppos
+= cast(uint)float.sizeof
;
1180 return *cast(const(float)*)(&xp
);
1184 float scaleX (in float v
) nothrow @trusted @nogc { pragma(inline
, true); return ofsx
+cast(float)v
*scalex
; }
1185 float scaleY (in float v
) nothrow @trusted @nogc { pragma(inline
, true); return ofsy
+cast(float)v
*scaley
; }
1187 static if (baph_debug_time
) {
1189 immutable tstt
= clockMicro();
1193 float cx
= 0.0f, cy
= 0.0f;
1194 bool doStroke
= false, doFill
= false;
1195 while (ppos
< plen
) {
1196 auto cmd
= getCommand();
1197 static if (baph_debug_dump
) {
1198 foreach (string mn
; __traits(allMembers
, Command
)) {
1199 if (__traits(getMember
, Command
, mn
) == cmd
) {
1200 import core
.stdc
.stdio
;
1201 static if (baph_debug_time
) {
1202 printf("cmd=%s ... ", mn
.ptr
);
1204 printf("cmd=%s\n", mn
.ptr
);
1208 static if (baph_debug_time
) {
1209 immutable cstt
= clockMicro();
1212 final switch (cmd
) {
1213 case Command
.Bounds
: ppos
+= 4*cast(uint)float.sizeof
; break;
1214 case Command
.StrokeMode
: doStroke
= true; doFill
= false; break;
1215 case Command
.FillMode
: doStroke
= false; doFill
= true; break;
1216 case Command
.StrokeFillMode
: doStroke
= true; doFill
= true; break;
1217 case Command
.NormalStroke
: case Command
.ThinStroke
: break;
1218 case Command
.MoveTo
:
1219 cx
= scaleX(getFloat());
1220 cy
= scaleY(getFloat());
1223 case Command
.LineTo
:
1224 immutable float ex
= scaleX(getFloat());
1225 immutable float ey
= scaleY(getFloat());
1230 case Command
.CubicTo
: // cubic bezier
1231 immutable float x1
= scaleX(getFloat());
1232 immutable float y1
= scaleY(getFloat());
1233 immutable float x2
= scaleX(getFloat());
1234 immutable float y2
= scaleY(getFloat());
1235 immutable float ex
= scaleX(getFloat());
1236 immutable float ey
= scaleY(getFloat());
1237 bezierTo(x1
, y1
, x2
, y2
, ex
, ey
);
1241 case Command
.EndPath
: // don't close this path
1243 if (doStroke
) stroke();
1244 //doFill = doStroke = false;
1248 static if (baph_debug_dump
&& baph_debug_time
) {
1249 immutable estt
= clockMicro()-cstt
;
1250 import core
.stdc
.stdio
; printf("microsecs: %u\n", cast(uint)estt
);
1254 static if (baph_debug_time
) {
1255 immutable fstt
= clockMicro();
1258 static if (baph_debug_time
) {
1259 immutable t
= clockMicro()-fstt
;
1260 import core
.stdc
.stdio
; printf("fill microsecs: %u\n", cast(uint)t
);
1264 static if (baph_debug_time
) {
1265 immutable sstt
= clockMicro();
1268 static if (baph_debug_time
) {
1269 immutable t
= clockMicro()-sstt
;
1270 import core
.stdc
.stdio
; printf("stroke microsecs: %u\n", cast(uint)t
);
1273 static if (baph_debug_time
) {
1274 immutable estt
= clockMicro()-tstt
;
1275 import core
.stdc
.stdio
; printf("total microsecs: %u\n", cast(uint)estt
);
1280 private static immutable ubyte[7641] baphometPath
= [
1281 0x01,0x04,0x06,0x30,0x89,0x7f,0x43,0x00,0x80,0xff,0x43,0x08,0xa0,0x1d,0xc6,0x43,0x00,0x80,0xff,0x43,
1282 0x00,0x80,0xff,0x43,0xa2,0x1d,0xc6,0x43,0x00,0x80,0xff,0x43,0x30,0x89,0x7f,0x43,0x08,0x00,0x80,0xff,
1283 0x43,0x7a,0x89,0xe5,0x42,0xa0,0x1d,0xc6,0x43,0x00,0x00,0x00,0x00,0x30,0x89,0x7f,0x43,0x00,0x00,0x00,
1284 0x00,0x08,0x7a,0x89,0xe5,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0x89,0xe5,0x42,0x00,0x00,
1285 0x00,0x00,0x30,0x89,0x7f,0x43,0x08,0x00,0x00,0x00,0x00,0xa2,0x1d,0xc6,0x43,0x7a,0x89,0xe5,0x42,0x00,
1286 0x80,0xff,0x43,0x30,0x89,0x7f,0x43,0x00,0x80,0xff,0x43,0x09,0x06,0x30,0x89,0x7f,0x43,0x72,0x87,0xdd,
1287 0x43,0x08,0x16,0x68,0xb3,0x43,0x72,0x87,0xdd,0x43,0x71,0x87,0xdd,0x43,0x17,0x68,0xb3,0x43,0x71,0x87,
1288 0xdd,0x43,0x30,0x89,0x7f,0x43,0x08,0x71,0x87,0xdd,0x43,0xd2,0x2f,0x18,0x43,0x16,0x68,0xb3,0x43,0x35,
1289 0xe2,0x87,0x42,0x30,0x89,0x7f,0x43,0x35,0xe2,0x87,0x42,0x08,0xd1,0x2f,0x18,0x43,0x35,0xe2,0x87,0x42,
1290 0x35,0xe2,0x87,0x42,0xd2,0x2f,0x18,0x43,0x35,0xe2,0x87,0x42,0x30,0x89,0x7f,0x43,0x08,0x35,0xe2,0x87,
1291 0x42,0x17,0x68,0xb3,0x43,0xd1,0x2f,0x18,0x43,0x72,0x87,0xdd,0x43,0x30,0x89,0x7f,0x43,0x72,0x87,0xdd,
1292 0x43,0x09,0x06,0x79,0xcb,0x11,0x43,0x62,0xbf,0xd7,0x42,0x07,0xa4,0x3f,0x7f,0x43,0x0b,0x86,0xdc,0x43,
1293 0x07,0x6c,0xb9,0xb2,0x43,0xe8,0xd1,0xca,0x42,0x07,0x6e,0x4d,0xa0,0x42,0xa9,0x10,0x9c,0x43,0x07,0xb7,
1294 0x40,0xd7,0x43,0xa9,0x10,0x9c,0x43,0x07,0x79,0xcb,0x11,0x43,0x62,0xbf,0xd7,0x42,0x09,0x06,0x98,0x42,
1295 0x74,0x43,0xb1,0x8d,0x68,0x43,0x08,0xd7,0x24,0x79,0x43,0xba,0x83,0x6e,0x43,0xa9,0x16,0x7c,0x43,0x56,
1296 0xa1,0x76,0x43,0x74,0x2a,0x7d,0x43,0x44,0x73,0x80,0x43,0x08,0x55,0xd1,0x7e,0x43,0xe3,0xea,0x76,0x43,
1297 0xbc,0x18,0x81,0x43,0x7f,0xa8,0x6e,0x43,0x8f,0x0a,0x84,0x43,0x02,0xfc,0x68,0x43,0x09,0x06,0x92,0x29,
1298 0x8d,0x43,0x73,0xc3,0x67,0x43,0x08,0xa4,0xd9,0x8e,0x43,0xf2,0xa6,0x7a,0x43,0x8f,0x22,0x88,0x43,0x75,
1299 0x2a,0x7d,0x43,0x42,0x7f,0x82,0x43,0x08,0xc8,0x88,0x43,0x09,0x06,0xc1,0x79,0x74,0x43,0x50,0x64,0x89,
1300 0x43,0x08,0x68,0x2d,0x72,0x43,0xee,0x21,0x81,0x43,0xcd,0x97,0x55,0x43,0xe6,0xf1,0x7b,0x43,0x91,0xec,
1301 0x5d,0x43,0xa8,0xc7,0x6a,0x43,0x09,0x06,0xfa,0xa5,0x52,0x43,0x60,0x97,0x7c,0x43,0x08,0x19,0xff,0x50,
1302 0x43,0xe9,0x6e,0x8a,0x43,0xb0,0xbd,0x70,0x43,0x4c,0x51,0x82,0x43,0x04,0xeb,0x69,0x43,0x66,0x0f,0x8e,
1303 0x43,0x09,0x06,0x17,0xbf,0x71,0x43,0x2c,0x58,0x94,0x43,0x08,0x1c,0x96,0x6e,0x43,0x61,0x68,0x99,0x43,
1304 0x2d,0x3a,0x6e,0x43,0xc8,0x81,0x9e,0x43,0xb7,0x9b,0x72,0x43,0x61,0xa4,0xa3,0x43,0x09,0x06,0x30,0xdb,
1305 0x82,0x43,0xdb,0xe9,0x93,0x43,0x08,0x11,0x82,0x84,0x43,0x61,0x68,0x99,0x43,0xe8,0x4a,0x84,0x43,0x8e,
1306 0xa6,0x9e,0x43,0x42,0x7f,0x82,0x43,0x61,0xa4,0xa3,0x43,0x09,0x06,0xc4,0x02,0x85,0x43,0xd1,0x0b,0x92,
1307 0x43,0x08,0xd6,0xb2,0x86,0x43,0x34,0x1e,0x92,0x43,0x4f,0x58,0x87,0x43,0xa4,0xf1,0x92,0x43,0x03,0xd9,
1308 0x87,0x43,0x7b,0xc6,0x94,0x43,0x09,0x06,0x87,0x3e,0x64,0x43,0x31,0x3b,0x93,0x43,0x08,0x3b,0xbf,0x64,
1309 0x43,0x6f,0xf9,0x91,0x43,0x96,0x0b,0x67,0x43,0xc5,0x4a,0x91,0x43,0xcf,0xfe,0x6a,0x43,0x31,0x2f,0x91,
1310 0x43,0x09,0x06,0x16,0x74,0xb5,0x43,0x08,0xec,0x8e,0x43,0x08,0x1b,0x4b,0xb2,0x43,0xee,0x5d,0x8b,0x43,
1311 0x48,0x4d,0xad,0x43,0x12,0xa6,0x8a,0x43,0xf3,0xd7,0xa7,0x43,0x74,0xb8,0x8a,0x43,0x08,0x8c,0xb2,0xa0,
1312 0x43,0xcd,0xf8,0x8a,0x43,0x68,0x46,0x9b,0x43,0x79,0x8f,0x87,0x43,0x49,0xc9,0x96,0x43,0xe9,0x3e,0x82,
1313 0x43,0x08,0x60,0x5c,0x97,0x43,0xa1,0xde,0x8b,0x43,0x4e,0xa0,0x93,0x43,0x31,0x3b,0x93,0x43,0x9f,0xea,
1314 0x8d,0x43,0x27,0x8d,0x99,0x43,0x08,0x07,0xe0,0x8c,0x43,0x06,0x34,0x9b,0x43,0x38,0xe9,0x8c,0x43,0x46,
1315 0x0a,0x9e,0x43,0x3d,0xcc,0x8b,0x43,0xb2,0x06,0xa2,0x43,0x08,0xf1,0x40,0x8a,0x43,0xb0,0x12,0xa4,0x43,
1316 0x39,0xd1,0x88,0x43,0x76,0x43,0xa6,0x43,0xfa,0x06,0x88,0x43,0xa4,0x75,0xa9,0x43,0x08,0x19,0x6c,0x88,
1317 0x43,0x9f,0x9e,0xac,0x43,0x66,0xeb,0x87,0x43,0x44,0x76,0xb0,0x43,0x6b,0xce,0x86,0x43,0x3b,0xbc,0xb4,
1318 0x43,0x08,0xa9,0x8c,0x85,0x43,0x06,0xd0,0xb5,0x43,0xfa,0xee,0x83,0x43,0x74,0xa3,0xb6,0x43,0x3d,0x90,
1319 0x81,0x43,0x31,0xf6,0xb6,0x43,0x08,0x9d,0x61,0x7d,0x43,0xee,0x48,0xb7,0x43,0x3b,0x1f,0x75,0x43,0xcf,
1320 0xe3,0xb6,0x43,0xee,0x6f,0x6d,0x43,0x68,0xe2,0xb5,0x43,0x08,0xd4,0xed,0x6b,0x43,0x87,0x2f,0xb2,0x43,
1321 0x0e,0xc9,0x6b,0x43,0xa7,0x7c,0xae,0x43,0x98,0xfa,0x67,0x43,0xab,0x53,0xab,0x43,0x08,0x25,0x2c,0x64,
1322 0x43,0x33,0xa2,0xa8,0x43,0x40,0x96,0x61,0x43,0xc3,0xc2,0xa5,0x43,0x64,0xde,0x60,0x43,0xfa,0xa2,0xa2,
1323 0x43,0x08,0xb0,0x5d,0x60,0x43,0x06,0x4c,0x9f,0x43,0x9a,0xca,0x5f,0x43,0x38,0x3d,0x9b,0x43,0x3b,0x8f,
1324 0x5c,0x43,0x85,0xb0,0x98,0x43,0x08,0x42,0x36,0x51,0x43,0x3d,0xf0,0x91,0x43,0xcd,0x4f,0x49,0x43,0xdb,
1325 0xb9,0x8b,0x43,0xe0,0xdb,0x44,0x43,0x42,0x8b,0x84,0x43,0x08,0x7e,0xc9,0x44,0x43,0x8a,0x57,0x8d,0x43,
1326 0xbc,0x6c,0x0f,0x43,0x23,0x62,0x8e,0x43,0xf5,0x17,0x07,0x43,0xc5,0x3e,0x8f,0x43,0x09,0x06,0xe0,0xea,
1327 0x76,0x43,0xab,0xef,0xc5,0x43,0x08,0x12,0x00,0x79,0x43,0xab,0xcb,0xbf,0x43,0x79,0xb9,0x6d,0x43,0x7e,
1328 0x8d,0xba,0x43,0xee,0x6f,0x6d,0x43,0x98,0xeb,0xb5,0x43,0x08,0xe0,0x02,0x7b,0x43,0x5f,0x1c,0xb8,0x43,
1329 0x85,0x2c,0x82,0x43,0xe9,0x65,0xb8,0x43,0xd6,0xb2,0x86,0x43,0xc6,0x05,0xb5,0x43,0x08,0x03,0xcd,0x85,
1330 0x43,0x5a,0x39,0xb9,0x43,0xe4,0x4f,0x81,0x43,0xdb,0xd4,0xbf,0x43,0xdf,0x6c,0x82,0x43,0xbc,0x93,0xc5,
1331 0x43,0x09,0x06,0xf0,0xd0,0x22,0x43,0x5d,0x19,0x08,0x43,0x08,0xbc,0xab,0x49,0x43,0x4a,0x35,0x29,0x43,
1332 0xcb,0xf7,0x65,0x43,0xce,0x37,0x45,0x43,0x0e,0x99,0x63,0x43,0x67,0xc6,0x5c,0x43,0x09,0x06,0x05,0x94,
1333 0xab,0x43,0xc2,0x13,0x04,0x43,0x08,0x9f,0x26,0x98,0x43,0x11,0x42,0x25,0x43,0x97,0x00,0x8a,0x43,0x32,
1334 0x32,0x41,0x43,0xf5,0x2f,0x8b,0x43,0xc7,0xc0,0x58,0x43,0x09,0x06,0x8f,0x85,0x48,0x43,0xe0,0xa8,0x8c,
1335 0x43,0x08,0x55,0xaa,0x48,0x43,0xe0,0xa8,0x8c,0x43,0x6b,0x3d,0x49,0x43,0xc1,0x43,0x8c,0x43,0x31,0x62,
1336 0x49,0x43,0xc1,0x43,0x8c,0x43,0x08,0x2f,0xe3,0x2f,0x43,0xad,0xe7,0x98,0x43,0xff,0x0d,0x0d,0x43,0xad,
1337 0xf3,0x9a,0x43,0xf0,0xaf,0xcc,0x42,0x74,0x00,0x97,0x43,0x08,0xbb,0xa2,0xf7,0x42,0x93,0x4d,0x93,0x43,
1338 0x5e,0x19,0x08,0x43,0x5a,0x2a,0x87,0x43,0x23,0x6e,0x10,0x43,0x42,0x97,0x86,0x43,0x08,0xca,0xe8,0x33,
1339 0x43,0x1b,0x3c,0x80,0x43,0x80,0xe8,0x4d,0x43,0xda,0xf4,0x70,0x43,0xae,0x0e,0x4f,0x43,0x2b,0x1b,0x65,
1340 0x43,0x08,0x66,0x96,0x54,0x43,0xa3,0xe1,0x3b,0x43,0x4e,0xc4,0x19,0x43,0xa0,0x1a,0x16,0x43,0x10,0xe2,
1341 0x14,0x43,0x26,0x14,0xe0,0x42,0x08,0x5c,0x91,0x1c,0x43,0xcb,0x27,0xee,0x42,0xa9,0x40,0x24,0x43,0x71,
1342 0x3b,0xfc,0x42,0xf3,0xef,0x2b,0x43,0x8b,0x27,0x05,0x43,0x08,0xe2,0x4b,0x2c,0x43,0x48,0x86,0x07,0x43,
1343 0x79,0x62,0x2f,0x43,0x05,0xe5,0x09,0x43,0x55,0x32,0x34,0x43,0xa0,0xd2,0x09,0x43,0x08,0x74,0xa3,0x36,
1344 0x43,0x3a,0xd1,0x08,0x43,0x7e,0x81,0x38,0x43,0x09,0xd4,0x0a,0x43,0x0d,0xba,0x39,0x43,0xa0,0xea,0x0d,
1345 0x43,0x08,0x6f,0xe4,0x3d,0x43,0x43,0xc7,0x0e,0x43,0xd6,0xe5,0x3e,0x43,0xc4,0x4a,0x11,0x43,0x55,0x7a,
1346 0x40,0x43,0x59,0x72,0x13,0x43,0x08,0x55,0x92,0x44,0x43,0xbf,0x73,0x14,0x43,0x23,0x95,0x46,0x43,0xa5,
1347 0x09,0x17,0x43,0xe0,0xf3,0x48,0x43,0xfe,0x55,0x19,0x43,0x08,0xcd,0x4f,0x49,0x43,0xaa,0x10,0x1c,0x43,
1348 0x61,0x77,0x4b,0x43,0xfe,0x6d,0x1d,0x43,0x80,0xe8,0x4d,0x43,0x2b,0x94,0x1e,0x43,0x08,0x58,0xc9,0x51,
1349 0x43,0x41,0x27,0x1f,0x43,0x9b,0x82,0x53,0x43,0x35,0x72,0x20,0x43,0x53,0xf2,0x54,0x43,0x88,0xcf,0x21,
1350 0x43,0x08,0x7b,0x29,0x55,0x43,0xe8,0x0a,0x25,0x43,0xb2,0x2d,0x58,0x43,0xef,0xe8,0x26,0x43,0x9b,0xb2,
1351 0x5b,0x43,0xd0,0x8f,0x28,0x43,0x08,0x5f,0xef,0x5f,0x43,0xeb,0x11,0x2a,0x43,0xfd,0xdc,0x5f,0x43,0x6e,
1352 0x95,0x2c,0x43,0x3b,0xa7,0x60,0x43,0x2b,0xf4,0x2e,0x43,0x08,0x06,0xbb,0x61,0x43,0xfd,0xe5,0x31,0x43,
1353 0xe7,0x61,0x63,0x43,0xef,0x30,0x33,0x43,0x53,0x52,0x65,0x43,0xa3,0xb1,0x33,0x43,0x08,0x12,0xa0,0x68,
1354 0x43,0x7f,0x69,0x34,0x43,0x40,0xc6,0x69,0x43,0x64,0xff,0x36,0x43,0x7e,0x90,0x6a,0x43,0x71,0xcc,0x39,
1355 0x43,0x08,0xbc,0x5a,0x6b,0x43,0x51,0x73,0x3b,0x43,0xc1,0x49,0x6c,0x43,0xa5,0xd0,0x3c,0x43,0xe0,0xba,
1356 0x6e,0x43,0xb8,0x74,0x3c,0x43,0x08,0x6b,0x1c,0x73,0x43,0x13,0xc1,0x3e,0x43,0x40,0xf6,0x71,0x43,0xce,
1357 0x1f,0x41,0x43,0x55,0x89,0x72,0x43,0x8d,0x7e,0x43,0x43,0x08,0x68,0x2d,0x72,0x43,0x89,0xae,0x4b,0x43,
1358 0xc1,0x79,0x74,0x43,0xcb,0x78,0x4c,0x43,0x55,0xa1,0x76,0x43,0x5b,0xb1,0x4d,0x43,0x08,0xa2,0x38,0x7a,
1359 0x43,0xd1,0x56,0x4e,0x43,0x85,0xb6,0x78,0x43,0xb1,0x15,0x54,0x43,0x83,0xc7,0x77,0x43,0x89,0x0e,0x5c,
1360 0x43,0x08,0xcf,0x46,0x77,0x43,0x0f,0x81,0x5f,0x43,0x1a,0xde,0x7a,0x43,0xce,0xc7,0x5d,0x43,0x42,0x73,
1361 0x80,0x43,0x99,0xc3,0x5a,0x43,0x08,0x85,0x2c,0x82,0x43,0xf6,0xe6,0x59,0x43,0x81,0x3d,0x81,0x43,0x16,
1362 0x10,0x50,0x43,0xd6,0x8e,0x80,0x43,0x5b,0x99,0x49,0x43,0x08,0xc4,0xea,0x80,0x43,0x22,0x95,0x46,0x43,
1363 0xfa,0xe2,0x81,0x43,0xda,0xec,0x43,0x43,0x78,0x77,0x83,0x43,0xe4,0xb2,0x41,0x43,0x08,0x8a,0x27,0x85,
1364 0x43,0x86,0x77,0x3e,0x43,0x0c,0x9f,0x85,0x43,0x07,0xf4,0x3b,0x43,0x8f,0x16,0x86,0x43,0xe6,0x82,0x39,
1365 0x43,0x08,0x85,0x44,0x86,0x43,0x37,0xd9,0x35,0x43,0x1e,0x4f,0x87,0x43,0xe1,0x7b,0x34,0x43,0xdf,0x90,
1366 0x88,0x43,0xb6,0x55,0x33,0x43,0x08,0xae,0x93,0x8a,0x43,0xfd,0xe5,0x31,0x43,0xfa,0x12,0x8a,0x43,0xbf,
1367 0x03,0x2d,0x43,0x19,0x78,0x8a,0x43,0x45,0x5e,0x2c,0x43,0x08,0x03,0xf1,0x8b,0x43,0xac,0x47,0x29,0x43,
1368 0x2f,0x17,0x8d,0x43,0x45,0x46,0x28,0x43,0xc8,0x21,0x8e,0x43,0x30,0xb3,0x27,0x43,0x08,0xa9,0xc8,0x8f,
1369 0x43,0xef,0xe8,0x26,0x43,0xbf,0x5b,0x90,0x43,0x5b,0xc1,0x24,0x43,0x10,0xca,0x90,0x43,0xa0,0x62,0x22,
1370 0x43,0x08,0x26,0x5d,0x91,0x43,0xbb,0xcc,0x1f,0x43,0xf0,0x70,0x92,0x43,0x78,0x13,0x1e,0x43,0x77,0xd7,
1371 0x93,0x43,0x73,0x24,0x1d,0x43,0x08,0x65,0x3f,0x96,0x43,0xce,0x58,0x1b,0x43,0xbe,0x7f,0x96,0x43,0xbf,
1372 0x8b,0x18,0x43,0x60,0x5c,0x97,0x43,0xb6,0xad,0x16,0x43,0x08,0xba,0xa8,0x99,0x43,0x78,0xcb,0x11,0x43,
1373 0x49,0xe1,0x9a,0x43,0x78,0xcb,0x11,0x43,0x01,0x51,0x9c,0x43,0x73,0xdc,0x10,0x43,0x08,0x72,0x24,0x9d,
1374 0x43,0xd2,0xff,0x0f,0x43,0x1c,0xd3,0x9d,0x43,0x07,0xec,0x0e,0x43,0xeb,0xc9,0x9d,0x43,0xe8,0x7a,0x0c,
1375 0x43,0x08,0x60,0x80,0x9d,0x43,0xd7,0xbe,0x08,0x43,0x4d,0xe8,0x9f,0x43,0x86,0x50,0x08,0x43,0x25,0xbd,
1376 0xa1,0x43,0x5b,0x2a,0x07,0x43,0x08,0x99,0x7f,0xa3,0x43,0xc9,0xf1,0x05,0x43,0x48,0x1d,0xa5,0x43,0x86,
1377 0x38,0x04,0x43,0x6c,0x71,0xa6,0x43,0x18,0x59,0x01,0x43,0x08,0x32,0x96,0xa6,0x43,0x6e,0x64,0xff,0x42,
1378 0x48,0x29,0xa7,0x43,0xed,0xcf,0xfd,0x42,0x5f,0xbc,0xa7,0x43,0x71,0x3b,0xfc,0x42,0x08,0xf3,0xe3,0xa9,
1379 0x43,0xf7,0x7d,0xf7,0x42,0xd8,0x6d,0xaa,0x43,0x45,0xe5,0xf2,0x42,0x48,0x41,0xab,0x43,0xcb,0x27,0xee,
1380 0x42,0x08,0x24,0xf9,0xab,0x43,0x52,0x6a,0xe9,0x42,0xee,0x0c,0xad,0x43,0x4c,0x8c,0xe7,0x42,0x1b,0x33,
1381 0xae,0x43,0xcc,0xf7,0xe5,0x42,0x08,0xaa,0x6b,0xaf,0x43,0xe8,0x61,0xe3,0x42,0x90,0xf5,0xaf,0x43,0xc9,
1382 0xf0,0xe0,0x42,0xe0,0x63,0xb0,0x43,0xe5,0x5a,0xde,0x42,0x08,0xaa,0x83,0xb3,0x43,0x29,0x2d,0x09,0x43,
1383 0x6a,0xfe,0x8e,0x43,0xb8,0x74,0x3c,0x43,0xd5,0x06,0x95,0x43,0xe6,0x79,0x67,0x43,0x08,0x2f,0x53,0x97,
1384 0x43,0xe9,0xb0,0x74,0x43,0xa8,0x28,0xa0,0x43,0x43,0xfd,0x76,0x43,0x83,0x28,0xad,0x43,0x17,0x59,0x81,
1385 0x43,0x08,0x3d,0xe7,0xbf,0x43,0x4b,0x8d,0x8c,0x43,0xae,0x96,0xba,0x43,0x66,0x27,0x92,0x43,0x15,0xe0,
1386 0xc7,0x43,0x6f,0x11,0x96,0x43,0x08,0x7e,0x5d,0xb2,0x43,0xdb,0x01,0x98,0x43,0x9e,0x56,0xa0,0x43,0x80,
1387 0xc1,0x97,0x43,0x69,0x2e,0x97,0x43,0x31,0x17,0x8d,0x43,0x09,0x06,0xab,0xa7,0x39,0x43,0x67,0x0f,0x0e,
1388 0x43,0x08,0xdb,0xbc,0x3b,0x43,0xe8,0x92,0x10,0x43,0xb5,0x85,0x3b,0x43,0x97,0x3c,0x14,0x43,0xab,0xa7,
1389 0x39,0x43,0x0c,0x0b,0x18,0x43,0x09,0x06,0xca,0x30,0x40,0x43,0x30,0x3b,0x13,0x43,0x08,0x17,0xc8,0x43,
1390 0x43,0xa5,0x09,0x17,0x43,0x7e,0xc9,0x44,0x43,0x1a,0xd8,0x1a,0x43,0x9d,0x22,0x43,0x43,0x8d,0xa6,0x1e,
1391 0x43,0x09,0x06,0xc8,0x78,0x4c,0x43,0xed,0xc9,0x1d,0x43,0x08,0x0b,0x32,0x4e,0x43,0x22,0xce,0x20,0x43,
1392 0x23,0xc5,0x4e,0x43,0x58,0xd2,0x23,0x43,0x0b,0x32,0x4e,0x43,0x2b,0xc4,0x26,0x43,0x09,0x06,0xec,0x08,
1393 0x58,0x43,0xc7,0xb1,0x26,0x43,0x08,0x02,0x9c,0x58,0x43,0xef,0x00,0x2b,0x43,0xd9,0x64,0x58,0x43,0x02,
1394 0xbd,0x2e,0x43,0x10,0x51,0x57,0x43,0x37,0xc1,0x31,0x43,0x09,0x06,0xcb,0xdf,0x61,0x43,0x4a,0x65,0x31,
1395 0x43,0x08,0xbe,0x2a,0x63,0x43,0xbd,0x33,0x35,0x43,0x32,0xe1,0x62,0x43,0x56,0x4a,0x38,0x43,0xde,0x83,
1396 0x61,0x43,0x3c,0xe0,0x3a,0x43,0x09,0x06,0x1c,0x7e,0x6a,0x43,0x5b,0x39,0x39,0x43,0x08,0x31,0x11,0x6b,
1397 0x43,0x0c,0xd2,0x3d,0x43,0x1c,0x7e,0x6a,0x43,0x13,0xd9,0x42,0x43,0xd9,0xc4,0x68,0x43,0xcb,0x60,0x48,
1398 0x43,0x09,0x06,0xe5,0xc1,0x73,0x43,0x16,0xf8,0x4b,0x43,0x08,0xa6,0xf7,0x72,0x43,0xb1,0xfd,0x4f,0x43,
1399 0x3b,0x07,0x71,0x43,0x4a,0x14,0x53,0x43,0xa2,0xf0,0x6d,0x43,0x7c,0x29,0x55,0x43,0x09,0x06,0x00,0x8d,
1400 0xa6,0x43,0xef,0x21,0x01,0x43,0x08,0x52,0xfb,0xa6,0x43,0xce,0xc8,0x02,0x43,0xe6,0x16,0xa7,0x43,0x51,
1401 0x4c,0x05,0x43,0x3b,0x68,0xa6,0x43,0x4c,0x75,0x08,0x43,0x09,0x06,0xde,0x20,0xa1,0x43,0x86,0x50,0x08,
1402 0x43,0x08,0xd4,0x4e,0xa1,0x43,0xd3,0xe7,0x0b,0x43,0xb5,0xe9,0xa0,0x43,0x59,0x5a,0x0f,0x43,0xba,0xcc,
1403 0x9f,0x43,0x54,0x83,0x12,0x43,0x09,0x06,0x77,0xfb,0x99,0x43,0x6c,0x16,0x13,0x43,0x08,0xde,0xfc,0x9a,
1404 0x43,0x4a,0xbd,0x14,0x43,0x06,0x34,0x9b,0x43,0xfe,0x55,0x19,0x43,0x13,0xe9,0x99,0x43,0x41,0x27,0x1f,
1405 0x43,0x09,0x06,0x46,0xce,0x93,0x43,0x26,0xa5,0x1d,0x43,0x08,0xe7,0xaa,0x94,0x43,0xbb,0xcc,0x1f,0x43,
1406 0x18,0xb4,0x94,0x43,0xa8,0x40,0x24,0x43,0xe2,0xbb,0x93,0x43,0x21,0xfe,0x28,0x43,0x09,0x06,0xb1,0x8e,
1407 0x8d,0x43,0xa8,0x58,0x28,0x43,0x08,0x19,0x90,0x8e,0x43,0x54,0x13,0x2b,0x43,0xa4,0xd9,0x8e,0x43,0x84,
1408 0x40,0x31,0x43,0x46,0xaa,0x8d,0x43,0x29,0x24,0x37,0x43,0x09,0x06,0xd6,0xbe,0x88,0x43,0xef,0x30,0x33,
1409 0x43,0x08,0x0c,0xb7,0x89,0x43,0x0e,0xa2,0x35,0x43,0xc0,0x37,0x8a,0x43,0x7a,0xaa,0x3b,0x43,0xbb,0x48,
1410 0x89,0x43,0xbb,0x7b,0x41,0x43,0x09,0x06,0x3a,0xad,0x82,0x43,0xc4,0x59,0x43,0x43,0x08,0xd2,0xb7,0x83,
1411 0x43,0x2b,0x5b,0x44,0x43,0x35,0xd6,0x85,0x43,0x48,0xf5,0x49,0x43,0x42,0x97,0x86,0x43,0xc4,0xa1,0x4f,
1412 0x43,0x09,0x06,0x9c,0xb3,0x80,0x43,0x48,0x55,0x5a,0x43,0x08,0xff,0xc5,0x80,0x43,0x09,0x73,0x55,0x43,
1413 0x93,0xe1,0x80,0x43,0x0f,0x39,0x53,0x43,0xf1,0xbe,0x7e,0x43,0x18,0xe7,0x4c,0x43,0x09,0x06,0xe0,0x02,
1414 0x7b,0x43,0x92,0xec,0x5d,0x43,0x08,0x09,0x3a,0x7b,0x43,0xf0,0xf7,0x58,0x43,0x09,0x3a,0x7b,0x43,0xe6,
1415 0x31,0x5b,0x43,0xe0,0x02,0x7b,0x43,0xa8,0x4f,0x56,0x43,0x09,0x06,0x39,0x4f,0x7d,0x43,0x3e,0x8f,0x5c,
1416 0x43,0x08,0xe9,0xe0,0x7c,0x43,0x03,0x9c,0x58,0x43,0x1e,0x2b,0x81,0x43,0x7f,0x30,0x5a,0x43,0xff,0x73,
1417 0x7d,0x43,0xf6,0xb6,0x51,0x43,0x09,0x06,0x5c,0xb8,0x52,0x43,0x28,0x21,0x87,0x43,0x08,0xae,0x3e,0x57,
1418 0x43,0x12,0x9a,0x88,0x43,0x23,0xf5,0x56,0x43,0x04,0xf1,0x8b,0x43,0x25,0xfc,0x5b,0x43,0x85,0x74,0x8e,
1419 0x43,0x08,0x2f,0xf2,0x61,0x43,0x8e,0x52,0x90,0x43,0xd9,0xdc,0x6c,0x43,0x85,0x74,0x8e,0x43,0xc6,0x20,
1420 0x69,0x43,0x3d,0xd8,0x8d,0x43,0x08,0x6d,0x8c,0x5a,0x43,0xf5,0x3b,0x8d,0x43,0x3d,0x77,0x58,0x43,0xa1,
1421 0xc6,0x87,0x43,0xf8,0xed,0x5e,0x43,0x5e,0x0d,0x86,0x43,0x09,0x06,0xde,0xcc,0x92,0x43,0xf7,0x17,0x87,
1422 0x43,0x08,0xb6,0x89,0x90,0x43,0xae,0x87,0x88,0x43,0x4a,0xa5,0x90,0x43,0xa1,0xde,0x8b,0x43,0xf9,0x2a,
1423 0x8e,0x43,0x23,0x62,0x8e,0x43,0x08,0xf5,0x2f,0x8b,0x43,0x5c,0x49,0x90,0x43,0x35,0xd6,0x85,0x43,0x8e,
1424 0x46,0x8e,0x43,0x3d,0xb4,0x87,0x43,0x47,0xaa,0x8d,0x43,0x08,0x6a,0xfe,0x8e,0x43,0xff,0x0d,0x8d,0x43,
1425 0xbb,0x6c,0x8f,0x43,0xf7,0x17,0x87,0x43,0x5c,0x31,0x8c,0x43,0xb2,0x5e,0x85,0x43,0x09,0x06,0x60,0x38,
1426 0x91,0x43,0x69,0x5d,0x7a,0x43,0x08,0x34,0x1e,0x92,0x43,0x1e,0x5b,0x89,0x43,0x04,0x63,0x7e,0x43,0x5e,
1427 0x01,0x84,0x43,0x59,0x2a,0x87,0x43,0x0d,0xcf,0x8d,0x43,0x09,0x03,0x04,0x06,0x5a,0x18,0x63,0x43,0x82,
1428 0x79,0x8b,0x43,0x08,0x25,0x2c,0x64,0x43,0x82,0x79,0x8b,0x43,0x2a,0x1b,0x65,0x43,0x9d,0xef,0x8a,0x43,
1429 0x2a,0x1b,0x65,0x43,0xc1,0x37,0x8a,0x43,0x08,0x2a,0x1b,0x65,0x43,0x17,0x89,0x89,0x43,0x25,0x2c,0x64,
1430 0x43,0x31,0xff,0x88,0x43,0x5a,0x18,0x63,0x43,0x31,0xff,0x88,0x43,0x08,0xf3,0x16,0x62,0x43,0x31,0xff,
1431 0x88,0x43,0xee,0x27,0x61,0x43,0x17,0x89,0x89,0x43,0xee,0x27,0x61,0x43,0xc1,0x37,0x8a,0x43,0x08,0xee,
1432 0x27,0x61,0x43,0x9d,0xef,0x8a,0x43,0xf3,0x16,0x62,0x43,0x82,0x79,0x8b,0x43,0x5a,0x18,0x63,0x43,0x82,
1433 0x79,0x8b,0x43,0x09,0x06,0x4f,0x64,0x89,0x43,0x82,0x79,0x8b,0x43,0x08,0x34,0xee,0x89,0x43,0x82,0x79,
1434 0x8b,0x43,0x85,0x5c,0x8a,0x43,0x9d,0xef,0x8a,0x43,0x85,0x5c,0x8a,0x43,0xc1,0x37,0x8a,0x43,0x08,0x85,
1435 0x5c,0x8a,0x43,0x17,0x89,0x89,0x43,0x34,0xee,0x89,0x43,0x31,0xff,0x88,0x43,0x4f,0x64,0x89,0x43,0x31,
1436 0xff,0x88,0x43,0x08,0x9c,0xe3,0x88,0x43,0x31,0xff,0x88,0x43,0x19,0x6c,0x88,0x43,0x17,0x89,0x89,0x43,
1437 0x19,0x6c,0x88,0x43,0xc1,0x37,0x8a,0x43,0x08,0x19,0x6c,0x88,0x43,0x9d,0xef,0x8a,0x43,0x9c,0xe3,0x88,
1438 0x43,0x82,0x79,0x8b,0x43,0x4f,0x64,0x89,0x43,0x82,0x79,0x8b,0x43,0x09,0x02,0x04,0x06,0x19,0x60,0x86,
1439 0x43,0xec,0xed,0xa3,0x43,0x08,0x35,0xd6,0x85,0x43,0x76,0x43,0xa6,0x43,0x93,0xe1,0x80,0x43,0x57,0x02,
1440 0xac,0x43,0x61,0xd8,0x80,0x43,0x87,0x17,0xae,0x43,0x08,0xa5,0x85,0x80,0x43,0xc3,0xfe,0xaf,0x43,0xce,
1441 0xbc,0x80,0x43,0x83,0x40,0xb1,0x43,0xa5,0x91,0x82,0x43,0x79,0x6e,0xb1,0x43,0x08,0x23,0x26,0x84,0x43,
1442 0x40,0x93,0xb1,0x43,0x30,0xe7,0x84,0x43,0xbe,0x1b,0xb1,0x43,0x11,0x82,0x84,0x43,0xab,0x6b,0xaf,0x43,
1443 0x08,0xb7,0x41,0x84,0x43,0x3b,0x98,0xae,0x43,0xb7,0x41,0x84,0x43,0xc3,0xf2,0xad,0x43,0xa1,0xae,0x83,
1444 0x43,0x83,0x28,0xad,0x43,0x08,0xb2,0x52,0x83,0x43,0x80,0x39,0xac,0x43,0x81,0x49,0x83,0x43,0xf0,0x00,
1445 0xab,0x43,0xe4,0x67,0x85,0x43,0x76,0x4f,0xa8,0x43,0x08,0x9c,0xd7,0x86,0x43,0xd1,0x83,0xa6,0x43,0xec,
1446 0x45,0x87,0x43,0x01,0x75,0xa2,0x43,0x19,0x60,0x86,0x43,0xec,0xed,0xa3,0x43,0x09,0x06,0xd9,0xdc,0x6c,
1447 0x43,0x14,0x25,0xa4,0x43,0x08,0xa2,0xf0,0x6d,0x43,0x9f,0x7a,0xa6,0x43,0x47,0xec,0x77,0x43,0x80,0x39,
1448 0xac,0x43,0xa9,0xfe,0x77,0x43,0xb0,0x4e,0xae,0x43,0x08,0x23,0xa4,0x78,0x43,0xea,0x35,0xb0,0x43,0xd2,
1449 0x35,0x78,0x43,0xab,0x77,0xb1,0x43,0xc1,0x79,0x74,0x43,0xa2,0xa5,0xb1,0x43,0x08,0xc6,0x50,0x71,0x43,
1450 0x68,0xca,0xb1,0x43,0xab,0xce,0x6f,0x43,0xe7,0x52,0xb1,0x43,0xea,0x98,0x70,0x43,0xd4,0xa2,0xaf,0x43,
1451 0x08,0x9d,0x19,0x71,0x43,0x96,0xd8,0xae,0x43,0x9d,0x19,0x71,0x43,0xec,0x29,0xae,0x43,0xca,0x3f,0x72,
1452 0x43,0xab,0x5f,0xad,0x43,0x08,0xa6,0xf7,0x72,0x43,0xa7,0x70,0xac,0x43,0x09,0x0a,0x73,0x43,0x17,0x38,
1453 0xab,0x43,0x44,0xcd,0x6e,0x43,0x9f,0x86,0xa8,0x43,0x08,0xd4,0xed,0x6b,0x43,0xf8,0xba,0xa6,0x43,0x31,
1454 0x11,0x6b,0x43,0x2a,0xac,0xa2,0x43,0xd9,0xdc,0x6c,0x43,0x14,0x25,0xa4,0x43,0x09,0x01,0x05,0x06,0x66,
1455 0x5d,0x7a,0x43,0x74,0xeb,0xc2,0x43,0x08,0x09,0x22,0x77,0x43,0x50,0xbb,0xc7,0x43,0xe9,0xe0,0x7c,0x43,
1456 0xf5,0x86,0xc9,0x43,0x8f,0x94,0x7a,0x43,0xc5,0x95,0xcd,0x43,0x09,0x06,0x08,0x98,0x80,0x43,0x6b,0x19,
1457 0xc3,0x43,0x08,0xb7,0x35,0x82,0x43,0x79,0xf2,0xc7,0x43,0xf1,0xbe,0x7e,0x43,0x1e,0xbe,0xc9,0x43,0x73,
1458 0x7c,0x80,0x43,0xec,0xcc,0xcd,0x43,0x09,0x06,0x28,0xab,0x7d,0x43,0xae,0xde,0xc6,0x43,0x08,0x1e,0xcd,
1459 0x7b,0x43,0x8a,0xa2,0xc9,0x43,0x30,0x89,0x7f,0x43,0x5c,0x94,0xcc,0x43,0x28,0xab,0x7d,0x43,0x42,0x2a,
1460 0xcf,0x43,0x09,0x01,0x05,0x06,0x24,0x14,0xe0,0x42,0xf5,0x77,0x97,0x43,0x08,0xf7,0x1d,0xe7,0x42,0x74,
1461 0x00,0x97,0x43,0x4d,0x93,0xec,0x42,0xdb,0xf5,0x95,0x43,0x29,0x4b,0xed,0x42,0xcd,0x34,0x95,0x43,0x09,
1462 0x06,0x29,0x7b,0xf5,0x42,0x6f,0x1d,0x98,0x43,0x08,0xe4,0xf1,0xfb,0x42,0x61,0x5c,0x97,0x43,0xdb,0x7d,
1463 0x01,0x43,0xb2,0xbe,0x95,0x43,0x55,0x23,0x02,0x43,0xe7,0xaa,0x94,0x43,0x09,0x06,0x98,0xdc,0x03,0x43,
1464 0xbe,0x8b,0x98,0x43,0x08,0x66,0xdf,0x05,0x43,0x47,0xe6,0x97,0x43,0xae,0x87,0x08,0x43,0x98,0x48,0x96,
1465 0x43,0x61,0x08,0x09,0x43,0xd6,0x06,0x95,0x43,0x09,0x06,0x31,0x0b,0x0b,0x43,0x8e,0x82,0x98,0x43,0x08,
1466 0xdb,0xc5,0x0d,0x43,0x80,0xc1,0x97,0x43,0xd6,0xee,0x10,0x43,0xa9,0xec,0x95,0x43,0x79,0xcb,0x11,0x43,
1467 0x55,0x8f,0x94,0x43,0x09,0x06,0xd1,0x2f,0x18,0x43,0xdb,0x01,0x98,0x43,0x08,0xad,0xe7,0x18,0x43,0x38,
1468 0x25,0x97,0x43,0x8a,0x9f,0x19,0x43,0x80,0xb5,0x95,0x43,0xd6,0x1e,0x19,0x43,0xe0,0xd8,0x94,0x43,0x09,
1469 0x06,0x9a,0x5b,0x1d,0x43,0x58,0x8a,0x97,0x43,0x08,0x01,0x5d,0x1e,0x43,0xf1,0x88,0x96,0x43,0x2f,0x83,
1470 0x1f,0x43,0x19,0xb4,0x94,0x43,0x19,0xf0,0x1e,0x43,0x6f,0x05,0x94,0x43,0x09,0x06,0x0b,0x53,0x24,0x43,
1471 0xae,0xdb,0x96,0x43,0x08,0x25,0xd5,0x25,0x43,0x50,0xac,0x95,0x43,0x53,0xfb,0x26,0x43,0x8a,0x7b,0x93,
1472 0x43,0x76,0x43,0x26,0x43,0xb7,0x95,0x92,0x43,0x09,0x06,0x76,0x5b,0x2a,0x43,0x47,0xda,0x95,0x43,0x08,
1473 0xf3,0xef,0x2b,0x43,0x10,0xe2,0x94,0x43,0x6d,0x95,0x2c,0x43,0xae,0xc3,0x92,0x43,0x68,0xa6,0x2b,0x43,
1474 0x47,0xc2,0x91,0x43,0x09,0x06,0x36,0xc1,0x31,0x43,0x2c,0x58,0x94,0x43,0x08,0x8c,0x1e,0x33,0x43,0x31,
1475 0x3b,0x93,0x43,0x79,0x7a,0x33,0x43,0xff,0x25,0x91,0x43,0xd9,0x9d,0x32,0x43,0xc1,0x5b,0x90,0x43,0x09,
1476 0x06,0x25,0x35,0x36,0x43,0x31,0x3b,0x93,0x43,0x08,0x3f,0xb7,0x37,0x43,0xc1,0x67,0x92,0x43,0xe0,0x93,
1477 0x38,0x43,0xae,0xb7,0x90,0x43,0x7e,0x81,0x38,0x43,0x0d,0xdb,0x8f,0x43,0x09,0x06,0xb5,0x85,0x3b,0x43,
1478 0xe4,0xaf,0x91,0x43,0x08,0xcf,0x07,0x3d,0x43,0x9d,0x13,0x91,0x43,0xbc,0x63,0x3d,0x43,0x47,0xb6,0x8f,
1479 0x43,0xe5,0x9a,0x3d,0x43,0x74,0xd0,0x8e,0x43,0x09,0x06,0xae,0xc6,0x42,0x43,0xa4,0xd9,0x8e,0x43,0x08,
1480 0xca,0x48,0x44,0x43,0xfa,0x2a,0x8e,0x43,0xa2,0x11,0x44,0x43,0x9d,0xfb,0x8c,0x43,0x55,0x92,0x44,0x43,
1481 0x0d,0xc3,0x8b,0x43,0x09,0x06,0x39,0x10,0xc3,0x43,0x34,0x36,0x96,0x43,0x08,0x92,0x44,0xc1,0x43,0xe4,
1482 0xc7,0x95,0x43,0x6f,0xf0,0xbf,0x43,0x4b,0xbd,0x94,0x43,0x47,0xb9,0xbf,0x43,0x0b,0xf3,0x93,0x43,0x09,
1483 0x06,0x8f,0x49,0xbe,0x43,0xb7,0xad,0x96,0x43,0x08,0x11,0xb5,0xbc,0x43,0x77,0xe3,0x95,0x43,0x9c,0xf2,
1484 0xba,0x43,0xfa,0x4e,0x94,0x43,0xae,0x96,0xba,0x43,0x31,0x3b,0x93,0x43,0x09,0x06,0xdb,0xb0,0xb9,0x43,
1485 0x10,0xee,0x96,0x43,0x08,0x42,0xa6,0xb8,0x43,0xc8,0x51,0x96,0x43,0x50,0x5b,0xb7,0x43,0x19,0xb4,0x94,
1486 0x43,0xf7,0x1a,0xb7,0x43,0x58,0x72,0x93,0x43,0x09,0x06,0xf2,0x2b,0xb6,0x43,0x10,0xee,0x96,0x43,0x08,
1487 0x9d,0xce,0xb4,0x43,0x04,0x2d,0x96,0x43,0xed,0x30,0xb3,0x43,0x2c,0x58,0x94,0x43,0xce,0xcb,0xb2,0x43,
1488 0xd6,0xfa,0x92,0x43,0x09,0x06,0x5a,0x09,0xb1,0x43,0x19,0xc0,0x96,0x43,0x08,0x6c,0xad,0xb0,0x43,0x77,
1489 0xe3,0x95,0x43,0x7e,0x51,0xb0,0x43,0xc0,0x73,0x94,0x43,0xd8,0x91,0xb0,0x43,0x1e,0x97,0x93,0x43,0x09,
1490 0x06,0x48,0x4d,0xad,0x43,0xbe,0x7f,0x96,0x43,0x08,0x95,0xcc,0xac,0x43,0x58,0x7e,0x95,0x43,0x4d,0x30,
1491 0xac,0x43,0x80,0xa9,0x93,0x43,0xd8,0x79,0xac,0x43,0xd6,0xfa,0x92,0x43,0x09,0x06,0x90,0xd1,0xa9,0x43,
1492 0x14,0xd1,0x95,0x43,0x08,0x83,0x10,0xa9,0x43,0xb7,0xa1,0x94,0x43,0x3b,0x74,0xa8,0x43,0xf1,0x70,0x92,
1493 0x43,0x29,0xd0,0xa8,0x43,0x1e,0x8b,0x91,0x43,0x09,0x06,0x5a,0xcd,0xa6,0x43,0x8a,0x87,0x95,0x43,0x08,
1494 0x1c,0x03,0xa6,0x43,0x23,0x86,0x94,0x43,0x5f,0xb0,0xa5,0x43,0xc1,0x67,0x92,0x43,0xe1,0x27,0xa6,0x43,
1495 0x8a,0x6f,0x91,0x43,0x09,0x06,0xd4,0x5a,0xa3,0x43,0x2c,0x58,0x94,0x43,0x08,0x29,0xac,0xa2,0x43,0x31,
1496 0x3b,0x93,0x43,0x32,0x7e,0xa2,0x43,0xff,0x25,0x91,0x43,0x83,0xec,0xa2,0x43,0x8e,0x52,0x90,0x43,0x09,
1497 0x06,0xf8,0x96,0xa0,0x43,0x1e,0x97,0x93,0x43,0x08,0xeb,0xd5,0x9f,0x43,0x7b,0xba,0x92,0x43,0x99,0x67,
1498 0x9f,0x43,0x9d,0x13,0x91,0x43,0x99,0x67,0x9f,0x43,0xfa,0x36,0x90,0x43,0x09,0x06,0xeb,0xc9,0x9d,0x43,
1499 0xc8,0x39,0x92,0x43,0x08,0xde,0x08,0x9d,0x43,0xb2,0xa6,0x91,0x43,0xe6,0xda,0x9c,0x43,0x2c,0x40,0x90,
1500 0x43,0x52,0xbf,0x9c,0x43,0x5a,0x5a,0x8f,0x43,0x09,0x06,0x37,0x3d,0x9b,0x43,0x85,0x80,0x90,0x43,0x08,
1501 0x2a,0x7c,0x9a,0x43,0xdb,0xd1,0x8f,0x43,0xf0,0xa0,0x9a,0x43,0x7d,0xa2,0x8e,0x43,0x65,0x57,0x9a,0x43,
1502 0xee,0x69,0x8d,0x43,0x09,0x02,0x04,0x06,0x2a,0xf4,0x2e,0x42,0x04,0x21,0x94,0x43,0x08,0x0d,0x8a,0x31,
1503 0x42,0x9f,0x0e,0x94,0x43,0xf3,0x1f,0x34,0x42,0x3d,0xfc,0x93,0x43,0x63,0xff,0x36,0x42,0xa9,0xe0,0x93,
1504 0x43,0x08,0xb5,0x34,0x5d,0x42,0x0b,0xf3,0x93,0x43,0x6d,0xa4,0x5e,0x42,0x03,0x39,0x98,0x43,0xe7,0x31,
1505 0x5b,0x42,0x93,0x89,0x9d,0x43,0x08,0x02,0x9c,0x58,0x42,0xd4,0x5a,0xa3,0x43,0x38,0x70,0x53,0x42,0x14,
1506 0x49,0xaa,0x43,0xf8,0xed,0x5e,0x42,0x83,0x28,0xad,0x43,0x08,0xea,0x68,0x68,0x42,0x20,0x22,0xaf,0x43,
1507 0x12,0xb8,0x6c,0x42,0xb5,0x49,0xb1,0x43,0x2a,0x4b,0x6d,0x42,0x0d,0x96,0xb3,0x43,0x07,0x2a,0x4b,0x6d,
1508 0x42,0xc6,0x05,0xb5,0x43,0x08,0x87,0x6e,0x6c,0x42,0x68,0xee,0xb7,0x43,0x1c,0x66,0x66,0x42,0x31,0x0e,
1509 0xbb,0x43,0x57,0x11,0x5e,0x42,0x8f,0x49,0xbe,0x43,0x08,0x66,0x96,0x54,0x42,0xb9,0x5c,0xb8,0x43,0x2c,
1510 0x2b,0x3c,0x42,0x68,0xd6,0xb3,0x43,0x2a,0xf4,0x2e,0x42,0x6d,0xad,0xb0,0x43,0x07,0x2a,0xf4,0x2e,0x42,
1511 0x61,0xa4,0xa3,0x43,0x08,0x55,0x1a,0x30,0x42,0xf0,0xd0,0xa2,0x43,0xf8,0xf6,0x30,0x42,0xb2,0x06,0xa2,
1512 0x43,0x98,0xd3,0x31,0x42,0xd6,0x4e,0xa1,0x43,0x08,0x1c,0x6f,0x38,0x42,0x2a,0x94,0x9e,0x43,0xc1,0x22,
1513 0x36,0x42,0xf5,0x9b,0x9d,0x43,0x2a,0xf4,0x2e,0x42,0x6a,0x52,0x9d,0x43,0x07,0x2a,0xf4,0x2e,0x42,0x57,
1514 0xa2,0x9b,0x43,0x08,0xab,0x8f,0x35,0x42,0x8a,0xab,0x9b,0x43,0xe9,0x71,0x3a,0x42,0xb2,0xe2,0x9b,0x43,
1515 0xb7,0x74,0x3c,0x42,0x34,0x5a,0x9c,0x43,0x08,0x23,0x7d,0x42,0x42,0x0b,0x2f,0x9e,0x43,0xe5,0x9a,0x3d,
1516 0x42,0x38,0x6d,0xa3,0x43,0x36,0xd9,0x35,0x42,0xf3,0xd7,0xa7,0x43,0x08,0x12,0x61,0x2e,0x42,0xb0,0x42,
1517 0xac,0x43,0x63,0xff,0x36,0x42,0xdd,0x74,0xaf,0x43,0x1e,0xa6,0x45,0x42,0x44,0x82,0xb2,0x43,0x08,0x74,
1518 0x1b,0x4b,0x42,0x79,0x7a,0xb3,0x43,0x10,0x21,0x4f,0x42,0x2a,0x18,0xb5,0x43,0xdb,0x4c,0x54,0x42,0x91,
1519 0x19,0xb6,0x43,0x08,0xee,0x3f,0x65,0x42,0x5f,0x28,0xba,0x43,0xa7,0xaf,0x66,0x42,0xb9,0x50,0xb6,0x43,
1520 0x14,0x58,0x5c,0x42,0xca,0xdc,0xb1,0x43,0x08,0x2c,0x8b,0x4c,0x42,0x4e,0x30,0xac,0x43,0x19,0xcf,0x48,
1521 0x42,0x2a,0xd0,0xa8,0x43,0xbc,0xab,0x49,0x42,0xa9,0x4c,0xa6,0x43,0x08,0x61,0x5f,0x47,0x42,0xfa,0xa2,
1522 0xa2,0x43,0xa7,0xaf,0x66,0x42,0x85,0x98,0x94,0x43,0x2a,0xf4,0x2e,0x42,0xc3,0x62,0x95,0x43,0x07,0x2a,
1523 0xf4,0x2e,0x42,0x04,0x21,0x94,0x43,0x09,0x06,0xd0,0xfe,0xea,0x41,0x9f,0x0e,0x94,0x43,0x08,0xdc,0xe3,
1524 0xf1,0x41,0xe9,0x9e,0x92,0x43,0xd2,0xe7,0x0b,0x42,0xd6,0x06,0x95,0x43,0x2a,0xf4,0x2e,0x42,0x04,0x21,
1525 0x94,0x43,0x07,0x2a,0xf4,0x2e,0x42,0xc3,0x62,0x95,0x43,0x08,0x87,0x17,0x2e,0x42,0xc3,0x62,0x95,0x43,
1526 0xe7,0x3a,0x2d,0x42,0xf5,0x6b,0x95,0x43,0x44,0x5e,0x2c,0x42,0xf5,0x6b,0x95,0x43,0x08,0xd1,0x47,0x1c,
1527 0x42,0x19,0xc0,0x96,0x43,0x66,0xdf,0x05,0x42,0x38,0x19,0x95,0x43,0x12,0x6a,0x00,0x42,0xb2,0xbe,0x95,
1528 0x43,0x08,0xbb,0x6b,0xea,0x41,0xd6,0x12,0x97,0x43,0x2d,0x82,0xfa,0x41,0x61,0x74,0x9b,0x43,0x7e,0x72,
1529 0x06,0x42,0x8a,0xab,0x9b,0x43,0x08,0xc8,0x39,0x12,0x42,0x4e,0xd0,0x9b,0x43,0x53,0xe3,0x22,0x42,0xc3,
1530 0x86,0x9b,0x43,0x2a,0xf4,0x2e,0x42,0x57,0xa2,0x9b,0x43,0x07,0x2a,0xf4,0x2e,0x42,0x6a,0x52,0x9d,0x43,
1531 0x08,0x01,0xa5,0x2a,0x42,0xa4,0x2d,0x9d,0x43,0x96,0x9c,0x24,0x42,0x06,0x40,0x9d,0x43,0x8a,0xb7,0x1d,
1532 0x42,0x9a,0x5b,0x9d,0x43,0x08,0x6b,0x16,0x13,0x42,0xcd,0x64,0x9d,0x43,0x42,0xc7,0x0e,0x42,0x9a,0x5b,
1533 0x9d,0x43,0x23,0x26,0x04,0x42,0xcd,0x64,0x9d,0x43,0x08,0xe6,0x91,0xeb,0x41,0x38,0x49,0x9d,0x43,0x73,
1534 0x7b,0xdb,0x41,0xf5,0x83,0x99,0x43,0x7f,0x60,0xe2,0x41,0x0b,0x0b,0x98,0x43,0x08,0x7f,0x60,0xe2,0x41,
1535 0xec,0x99,0x95,0x43,0xe3,0x5a,0xde,0x41,0xbe,0x7f,0x96,0x43,0xd0,0xfe,0xea,0x41,0x9f,0x0e,0x94,0x43,
1536 0x07,0xd0,0xfe,0xea,0x41,0x9f,0x0e,0x94,0x43,0x09,0x06,0x2a,0xf4,0x2e,0x42,0x6d,0xad,0xb0,0x43,0x08,
1537 0xd4,0x7e,0x29,0x42,0xab,0x6b,0xaf,0x43,0x4e,0x0c,0x26,0x42,0x44,0x6a,0xae,0x43,0x38,0x79,0x25,0x42,
1538 0xd4,0x96,0xad,0x43,0x08,0x25,0xbd,0x21,0x42,0xe2,0x4b,0xac,0x43,0x49,0x35,0x29,0x42,0x9a,0x97,0xa7,
1539 0x43,0x2a,0xf4,0x2e,0x42,0x61,0xa4,0xa3,0x43,0x07,0x2a,0xf4,0x2e,0x42,0x6d,0xad,0xb0,0x43,0x09,0x06,
1540 0x1d,0xe5,0x7f,0x43,0x87,0x4a,0xe6,0x43,0x08,0x86,0x20,0x80,0x43,0x57,0x41,0xe6,0x43,0x7d,0x4e,0x80,
1541 0x43,0x25,0x38,0xe6,0x43,0xa5,0x85,0x80,0x43,0xf3,0x2e,0xe6,0x43,0x08,0x35,0xca,0x83,0x43,0xd4,0xc9,
1542 0xe5,0x43,0x9c,0xd7,0x86,0x43,0x44,0x91,0xe4,0x43,0xd5,0xca,0x8a,0x43,0x91,0x1c,0xe6,0x43,0x08,0x53,
1543 0x5f,0x8c,0x43,0xf8,0x1d,0xe7,0x43,0x2f,0x17,0x8d,0x43,0x4e,0x7b,0xe8,0x43,0x92,0x29,0x8d,0x43,0x2f,
1544 0x22,0xea,0x43,0x07,0x92,0x29,0x8d,0x43,0x44,0xb5,0xea,0x43,0x08,0xfe,0x0d,0x8d,0x43,0x2a,0x4b,0xed,
1545 0x43,0xe3,0x8b,0x8b,0x43,0x55,0x7d,0xf0,0x43,0xec,0x51,0x89,0x43,0x72,0x0b,0xf4,0x43,0x08,0xcd,0xd4,
1546 0x84,0x43,0x9d,0x55,0xfb,0x43,0xc9,0xe5,0x83,0x43,0x74,0x1e,0xfb,0x43,0x73,0x94,0x84,0x43,0x5a,0x90,
1547 0xf7,0x43,0x08,0xe8,0x62,0x88,0x43,0xfd,0x30,0xee,0x43,0x39,0xc5,0x86,0x43,0xdd,0xbf,0xeb,0x43,0x35,
1548 0xbe,0x81,0x43,0x40,0xde,0xed,0x43,0x08,0x4f,0x34,0x81,0x43,0x36,0x0c,0xee,0x43,0x08,0x98,0x80,0x43,
1549 0xfd,0x30,0xee,0x43,0x1d,0xe5,0x7f,0x43,0x91,0x4c,0xee,0x43,0x07,0x1d,0xe5,0x7f,0x43,0x91,0x40,0xec,
1550 0x43,0x08,0x35,0xbe,0x81,0x43,0x06,0xf7,0xeb,0x43,0x15,0x65,0x83,0x43,0x49,0xa4,0xeb,0x43,0x1e,0x43,
1551 0x85,0x43,0xbe,0x5a,0xeb,0x43,0x08,0xae,0x93,0x8a,0x43,0xfd,0x18,0xea,0x43,0x42,0x97,0x86,0x43,0x5f,
1552 0x67,0xf4,0x43,0xa9,0x98,0x87,0x43,0xd4,0x1d,0xf4,0x43,0x08,0x5c,0x25,0x8a,0x43,0xcf,0x16,0xef,0x43,
1553 0x46,0xaa,0x8d,0x43,0x5a,0x3c,0xe9,0x43,0x19,0x6c,0x88,0x43,0x53,0x5e,0xe7,0x43,0x08,0xc4,0x02,0x85,
1554 0x43,0x96,0x0b,0xe7,0x43,0x85,0x2c,0x82,0x43,0x83,0x67,0xe7,0x43,0x1d,0xe5,0x7f,0x43,0x72,0xc3,0xe7,
1555 0x43,0x07,0x1d,0xe5,0x7f,0x43,0x87,0x4a,0xe6,0x43,0x09,0x06,0xfd,0x24,0x6c,0x43,0xd9,0x94,0xe0,0x43,
1556 0x08,0xfa,0x6c,0x78,0x43,0xd1,0xc2,0xe0,0x43,0x25,0x5c,0x6c,0x43,0x25,0x44,0xe8,0x43,0x1d,0xe5,0x7f,
1557 0x43,0x87,0x4a,0xe6,0x43,0x07,0x1d,0xe5,0x7f,0x43,0x72,0xc3,0xe7,0x43,0x08,0xa6,0x27,0x7b,0x43,0x91,
1558 0x28,0xe8,0x43,0xbc,0xa2,0x77,0x43,0xb0,0x8d,0xe8,0x43,0xc6,0x68,0x75,0x43,0x57,0x4d,0xe8,0x43,0x08,
1559 0xe0,0xd2,0x72,0x43,0xab,0x9e,0xe7,0x43,0x50,0x9a,0x71,0x43,0x2a,0x27,0xe7,0x43,0xea,0x98,0x70,0x43,
1560 0x57,0x35,0xe4,0x43,0x08,0x94,0x3b,0x6f,0x43,0x14,0x7c,0xe2,0x43,0xff,0x13,0x6d,0x43,0x06,0xbb,0xe1,
1561 0x43,0xcf,0xfe,0x6a,0x43,0x06,0xbb,0xe1,0x43,0x08,0x44,0x9d,0x66,0x43,0x77,0x8e,0xe2,0x43,0x3b,0xef,
1562 0x6c,0x43,0x91,0x10,0xe4,0x43,0xfd,0x24,0x6c,0x43,0xb0,0x81,0xe6,0x43,0x08,0x96,0x23,0x6b,0x43,0xee,
1563 0x57,0xe9,0x43,0xca,0x0f,0x6a,0x43,0x5f,0x37,0xec,0x43,0x55,0x71,0x6e,0x43,0x9f,0x01,0xed,0x43,0x08,
1564 0xdb,0xfb,0x75,0x43,0x3b,0xef,0xec,0x43,0x09,0x3a,0x7b,0x43,0xb0,0xa5,0xec,0x43,0x1d,0xe5,0x7f,0x43,
1565 0x91,0x40,0xec,0x43,0x07,0x1d,0xe5,0x7f,0x43,0x91,0x4c,0xee,0x43,0x08,0xa9,0x16,0x7c,0x43,0xb0,0xb1,
1566 0xee,0x43,0x47,0xec,0x77,0x43,0xd9,0xe8,0xee,0x43,0x1e,0x9d,0x73,0x43,0xcf,0x16,0xef,0x43,0x08,0x0e,
1567 0xc9,0x6b,0x43,0xee,0x7b,0xef,0x43,0x7e,0x90,0x6a,0x43,0xfd,0x30,0xee,0x43,0x01,0xfc,0x68,0x43,0x4e,
1568 0x93,0xec,0x43,0x08,0x31,0xf9,0x66,0x43,0x4e,0x87,0xea,0x43,0x31,0x11,0x6b,0x43,0xd4,0xd5,0xe7,0x43,
1569 0xd9,0xc4,0x68,0x43,0xd4,0xc9,0xe5,0x43,0x08,0xe5,0x79,0x67,0x43,0x77,0x9a,0xe4,0x43,0x44,0x9d,0x66,
1570 0x43,0xab,0x86,0xe3,0x43,0x7e,0x78,0x66,0x43,0x0b,0xaa,0xe2,0x43,0x07,0x7e,0x78,0x66,0x43,0x57,0x29,
1571 0xe2,0x43,0x08,0xa7,0xaf,0x66,0x43,0xbe,0x1e,0xe1,0x43,0x87,0x56,0x68,0x43,0x77,0x82,0xe0,0x43,0xfd,
1572 0x24,0x6c,0x43,0xd9,0x94,0xe0,0x43,0x09,0x06,0xc4,0x41,0xbf,0x43,0x85,0xc0,0x72,0x42,0x08,0x73,0xdf,
1573 0xc0,0x43,0xf4,0x76,0x72,0x42,0x97,0x33,0xc2,0x43,0x85,0xc0,0x72,0x42,0xb2,0xb5,0xc3,0x43,0x64,0x56,
1574 0x75,0x42,0x08,0x03,0x24,0xc4,0x43,0x5e,0x7f,0x78,0x42,0xfa,0x51,0xc4,0x43,0x01,0x85,0x7c,0x42,0x5c,
1575 0x64,0xc4,0x43,0xa0,0xb3,0x80,0x42,0x07,0x5c,0x64,0xc4,0x43,0x10,0x93,0x83,0x42,0x08,0xc8,0x48,0xc4,
1576 0x43,0x1c,0x78,0x8a,0x42,0x27,0x6c,0xc3,0x43,0xaf,0xcf,0x94,0x42,0x23,0x7d,0xc2,0x43,0x99,0x9c,0xa4,
1577 0x42,0x08,0x3d,0xe7,0xbf,0x43,0xfb,0xfd,0xb5,0x42,0xb3,0x9d,0xbf,0x43,0x88,0x17,0xae,0x42,0xc4,0x41,
1578 0xbf,0x43,0x69,0x76,0xa3,0x42,0x07,0xc4,0x41,0xbf,0x43,0xac,0xc8,0x8f,0x42,0x08,0x4f,0x8b,0xbf,0x43,
1579 0xed,0x81,0x91,0x42,0xe4,0xa6,0xbf,0x43,0x5d,0x61,0x94,0x42,0xfa,0x39,0xc0,0x43,0x3b,0x49,0x9d,0x42,
1580 0x08,0x2b,0x43,0xc0,0x43,0x28,0xed,0xa9,0x42,0x61,0x3b,0xc1,0x43,0x00,0x9e,0xa5,0x42,0xe4,0xb2,0xc1,
1581 0x43,0x5d,0x91,0x9c,0x42,0x08,0x78,0xce,0xc1,0x43,0xfd,0x36,0x90,0x42,0x22,0x89,0xc4,0x43,0x81,0x72,
1582 0x86,0x42,0xae,0xc6,0xc2,0x43,0xa0,0xb3,0x80,0x42,0x08,0x54,0x86,0xc2,0x43,0x58,0xd1,0x7e,0x42,0x30,
1583 0x32,0xc1,0x43,0xce,0x5e,0x7b,0x42,0xc4,0x41,0xbf,0x43,0xe8,0xf1,0x7b,0x42,0x07,0xc4,0x41,0xbf,0x43,
1584 0x85,0xc0,0x72,0x42,0x09,0x06,0xf6,0x32,0xbb,0x43,0x40,0xa7,0x60,0x42,0x08,0x35,0xfd,0xbb,0x43,0xa4,
1585 0xa1,0x5c,0x42,0x5e,0x34,0xbc,0x43,0x9d,0x2a,0x70,0x42,0x5e,0x40,0xbe,0x43,0x0e,0x0a,0x73,0x42,0x08,
1586 0x4c,0x9c,0xbe,0x43,0x0e,0x0a,0x73,0x42,0x08,0xef,0xbe,0x43,0x0e,0x0a,0x73,0x42,0xc4,0x41,0xbf,0x43,
1587 0x85,0xc0,0x72,0x42,0x07,0xc4,0x41,0xbf,0x43,0xe8,0xf1,0x7b,0x42,0x08,0xcd,0x13,0xbf,0x43,0xe8,0xf1,
1588 0x7b,0x42,0xd6,0xe5,0xbe,0x43,0x71,0x3b,0x7c,0x42,0xdf,0xb7,0xbe,0x43,0x71,0x3b,0x7c,0x42,0x08,0x08,
1589 0xe3,0xbc,0x43,0xa4,0x61,0x7d,0x42,0x28,0x3c,0xbb,0x43,0x91,0x45,0x69,0x42,0x28,0x3c,0xbb,0x43,0x58,
1590 0x71,0x6e,0x42,0x08,0xce,0xfb,0xba,0x43,0xd5,0x35,0x78,0x42,0x59,0x45,0xbb,0x43,0x58,0x23,0x82,0x42,
1591 0xa1,0xe1,0xbb,0x43,0xd7,0xbe,0x88,0x42,0x08,0xc9,0x18,0xbc,0x43,0xaf,0x9f,0x8c,0x42,0x1e,0x76,0xbd,
1592 0x43,0x51,0x7c,0x8d,0x42,0xd6,0xe5,0xbe,0x43,0xf4,0x58,0x8e,0x42,0x08,0x9c,0x0a,0xbf,0x43,0x45,0xc7,
1593 0x8e,0x42,0x30,0x26,0xbf,0x43,0x96,0x35,0x8f,0x42,0xc4,0x41,0xbf,0x43,0xac,0xc8,0x8f,0x42,0x07,0xc4,
1594 0x41,0xbf,0x43,0x69,0x76,0xa3,0x42,0x08,0x08,0xef,0xbe,0x43,0xb1,0xd6,0x99,0x42,0xe8,0x89,0xbe,0x43,
1595 0xde,0xc5,0x8d,0x42,0xc0,0x46,0xbc,0x43,0xc2,0x5b,0x90,0x42,0x08,0x9c,0xf2,0xba,0x43,0x86,0x80,0x90,
1596 0x42,0xf2,0x43,0xba,0x43,0xe8,0x73,0x87,0x42,0x8f,0x31,0xba,0x43,0xb6,0xf4,0x7d,0x42,0x07,0x8f,0x31,
1597 0xba,0x43,0x21,0xc6,0x76,0x42,0x08,0xc0,0x3a,0xba,0x43,0x5f,0x48,0x6b,0x42,0xae,0x96,0xba,0x43,0xe3,
1598 0x83,0x61,0x42,0xf6,0x32,0xbb,0x43,0x40,0xa7,0x60,0x42,0x09,0x06,0xea,0x74,0xea,0x43,0x61,0x44,0x93,
1599 0x43,0x08,0x24,0x5c,0xec,0x43,0x31,0x3b,0x93,0x43,0xfb,0x30,0xee,0x43,0x93,0x4d,0x93,0x43,0x0d,0xe1,
1600 0xef,0x43,0x80,0xa9,0x93,0x43,0x08,0x8f,0x58,0xf0,0x43,0xd1,0x17,0x94,0x43,0xb7,0x8f,0xf0,0x43,0x10,
1601 0xe2,0x94,0x43,0xea,0x98,0xf0,0x43,0xa9,0xec,0x95,0x43,0x07,0xea,0x98,0xf0,0x43,0x38,0x25,0x97,0x43,
1602 0x08,0x23,0x74,0xf0,0x43,0x9f,0x32,0x9a,0x43,0x5a,0x60,0xef,0x43,0x53,0xcb,0x9e,0x43,0x2d,0x3a,0xee,
1603 0x43,0xfd,0x91,0xa3,0x43,0x08,0xa2,0xf0,0xed,0x43,0xdd,0x38,0xa5,0x43,0x17,0xa7,0xed,0x43,0xbe,0xdf,
1604 0xa6,0x43,0x5a,0x54,0xed,0x43,0x9f,0x86,0xa8,0x43,0x08,0xfc,0x24,0xec,0x43,0xca,0xc4,0xad,0x43,0x48,
1605 0xa4,0xeb,0x43,0x40,0x6f,0xab,0x43,0x28,0x3f,0xeb,0x43,0x1c,0x0f,0xa8,0x43,0x08,0x1f,0x6d,0xeb,0x43,
1606 0x72,0x48,0xa3,0x43,0x67,0x09,0xec,0x43,0xd1,0x53,0x9e,0x43,0xea,0x74,0xea,0x43,0x1e,0xc7,0x9b,0x43,
1607 0x07,0xea,0x74,0xea,0x43,0x8a,0x9f,0x99,0x43,0x08,0x7e,0x90,0xea,0x43,0x8a,0x9f,0x99,0x43,0x12,0xac,
1608 0xea,0x43,0xbc,0xa8,0x99,0x43,0xa7,0xc7,0xea,0x43,0xbc,0xa8,0x99,0x43,0x08,0x51,0x76,0xeb,0x43,0x9f,
1609 0x32,0x9a,0x43,0x5e,0x37,0xec,0x43,0x49,0xed,0x9c,0x43,0xb0,0xa5,0xec,0x43,0x2a,0xa0,0xa0,0x43,0x08,
1610 0x09,0xe6,0xec,0x43,0xd1,0x77,0xa4,0x43,0x28,0x4b,0xed,0x43,0x61,0xa4,0xa3,0x43,0xab,0xc2,0xed,0x43,
1611 0x8e,0xb2,0xa0,0x43,0x08,0x70,0xe7,0xed,0x43,0xde,0x08,0x9d,0x43,0x87,0x86,0xf0,0x43,0x2f,0x53,0x97,
1612 0x43,0x87,0x7a,0xee,0x43,0xec,0x99,0x95,0x43,0x08,0xca,0x27,0xee,0x43,0xff,0x3d,0x95,0x43,0x74,0xca,
1613 0xec,0x43,0x55,0x8f,0x94,0x43,0xea,0x74,0xea,0x43,0xe7,0xaa,0x94,0x43,0x07,0xea,0x74,0xea,0x43,0x61,
1614 0x44,0x93,0x43,0x09,0x06,0x05,0xd3,0xe5,0x43,0x19,0x9c,0x90,0x43,0x08,0x09,0xc2,0xe6,0x43,0xd1,0xff,
1615 0x8f,0x43,0x4d,0x6f,0xe6,0x43,0x74,0xe8,0x92,0x43,0x3b,0xd7,0xe8,0x43,0xc3,0x56,0x93,0x43,0x08,0x1f,
1616 0x61,0xe9,0x43,0x93,0x4d,0x93,0x43,0x05,0xeb,0xe9,0x43,0x93,0x4d,0x93,0x43,0xea,0x74,0xea,0x43,0x61,
1617 0x44,0x93,0x43,0x07,0xea,0x74,0xea,0x43,0xe7,0xaa,0x94,0x43,0x08,0x24,0x50,0xea,0x43,0xe7,0xaa,0x94,
1618 0x43,0x2d,0x22,0xea,0x43,0xe7,0xaa,0x94,0x43,0x36,0xf4,0xe9,0x43,0xe7,0xaa,0x94,0x43,0x08,0xa2,0xcc,
1619 0xe7,0x43,0xe0,0xd8,0x94,0x43,0xd4,0xc9,0xe5,0x43,0x19,0xa8,0x92,0x43,0xd4,0xc9,0xe5,0x43,0x27,0x69,
1620 0x93,0x43,0x08,0x17,0x77,0xe5,0x43,0xe0,0xd8,0x94,0x43,0x67,0xe5,0xe5,0x43,0x47,0xda,0x95,0x43,0x43,
1621 0x9d,0xe6,0x43,0xe2,0xd3,0x97,0x43,0x08,0x9d,0xdd,0xe6,0x43,0xad,0xe7,0x98,0x43,0x09,0xce,0xe8,0x43,
1622 0xff,0x55,0x99,0x43,0xea,0x74,0xea,0x43,0x8a,0x9f,0x99,0x43,0x07,0xea,0x74,0xea,0x43,0x1e,0xc7,0x9b,
1623 0x43,0x08,0x71,0xcf,0xe9,0x43,0x53,0xb3,0x9a,0x43,0xa7,0xbb,0xe8,0x43,0xdb,0x0d,0x9a,0x43,0xc6,0x14,
1624 0xe7,0x43,0xdb,0x0d,0x9a,0x43,0x08,0x48,0x80,0xe5,0x43,0xdb,0x0d,0x9a,0x43,0x0a,0xb6,0xe4,0x43,0xc3,
1625 0x6e,0x97,0x43,0x76,0x9a,0xe4,0x43,0x74,0xf4,0x94,0x43,0x07,0x76,0x9a,0xe4,0x43,0x79,0xd7,0x93,0x43,
1626 0x08,0xd8,0xac,0xe4,0x43,0x66,0x27,0x92,0x43,0x29,0x1b,0xe5,0x43,0xe0,0xc0,0x90,0x43,0x05,0xd3,0xe5,
1627 0x43,0x19,0x9c,0x90,0x43,0x09,0x06,0x1b,0x66,0xe6,0x42,0xe3,0xa3,0x8f,0x42,0x08,0x71,0x0b,0xf4,0x42,
1628 0x00,0x0e,0x8d,0x42,0x8c,0x0f,0x01,0x43,0x3e,0xc0,0x89,0x42,0xf3,0x28,0x06,0x43,0x48,0x9e,0x8b,0x42,
1629 0x08,0x15,0x89,0x09,0x43,0x00,0x0e,0x8d,0x42,0xe0,0x9c,0x0a,0x43,0xc1,0x8b,0x98,0x42,0xa6,0xc1,0x0a,
1630 0x43,0x02,0xa5,0xaa,0x42,0x07,0xa6,0xc1,0x0a,0x43,0xf9,0xf6,0xb0,0x42,0x08,0xa6,0xc1,0x0a,0x43,0x47,
1631 0x8e,0xb4,0x42,0x42,0xaf,0x0a,0x43,0x1f,0x6f,0xb8,0x42,0xe0,0x9c,0x0a,0x43,0xba,0x74,0xbc,0x42,0x08,
1632 0xa1,0xd2,0x09,0x43,0x40,0x47,0xd0,0x42,0x0d,0xab,0x07,0x43,0x91,0xb5,0xd0,0x42,0x3b,0xb9,0x04,0x43,
1633 0xec,0x71,0xba,0x42,0x08,0xe5,0x5b,0x03,0x43,0xe3,0x33,0xa8,0x42,0x63,0xd8,0x00,0x43,0xce,0x70,0x9f,
1634 0x42,0x1b,0x66,0xe6,0x42,0xae,0x2f,0xa5,0x42,0x07,0x1b,0x66,0xe6,0x42,0xa2,0x4a,0x9e,0x42,0x08,0xed,
1635 0x6f,0xed,0x42,0x73,0x24,0x9d,0x42,0xd8,0x0c,0xf5,0x42,0x99,0x6c,0x9c,0x42,0x27,0xab,0xfd,0x42,0xea,
1636 0xda,0x9c,0x42,0x08,0x36,0xca,0x03,0x43,0x2b,0x94,0x9e,0x42,0x68,0xc7,0x01,0x43,0x8f,0xbe,0xa2,0x42,
1637 0xfa,0x06,0x08,0x43,0x73,0xb4,0xb5,0x42,0x08,0x8e,0x2e,0x0a,0x43,0x1f,0x6f,0xb8,0x42,0x9d,0xe3,0x08,
1638 0x43,0xd7,0x1e,0x99,0x42,0x28,0x15,0x05,0x43,0x32,0x3b,0x93,0x42,0x08,0x63,0xf0,0x04,0x43,0x70,0xed,
1639 0x8f,0x42,0x71,0x0b,0xf4,0x42,0x32,0x3b,0x93,0x42,0x1b,0x66,0xe6,0x42,0x73,0xf4,0x94,0x42,0x07,0x1b,
1640 0x66,0xe6,0x42,0xe3,0xa3,0x8f,0x42,0x09,0x06,0x5e,0x28,0xba,0x42,0x35,0xe2,0x87,0x42,0x08,0x8e,0x55,
1641 0xc0,0x42,0xb8,0x4d,0x86,0x42,0x60,0xbf,0xd7,0x42,0x3e,0xf0,0x91,0x42,0x63,0xf6,0xe4,0x42,0x70,0xed,
1642 0x8f,0x42,0x08,0x7a,0x89,0xe5,0x42,0xac,0xc8,0x8f,0x42,0xcc,0xf7,0xe5,0x42,0xac,0xc8,0x8f,0x42,0x1b,
1643 0x66,0xe6,0x42,0xe3,0xa3,0x8f,0x42,0x07,0x1b,0x66,0xe6,0x42,0x73,0xf4,0x94,0x42,0x08,0x63,0xf6,0xe4,
1644 0x42,0x3b,0x19,0x95,0x42,0xe6,0x61,0xe3,0x42,0x00,0x3e,0x95,0x42,0xf4,0x16,0xe2,0x42,0xc4,0x62,0x95,
1645 0x42,0x08,0x6e,0x74,0xd6,0x42,0x15,0xd1,0x95,0x42,0x97,0x63,0xca,0x42,0xaf,0xcf,0x94,0x42,0xfb,0x2d,
1646 0xbe,0x42,0x86,0x80,0x90,0x42,0x08,0x97,0x03,0xba,0x42,0xce,0x10,0x8f,0x42,0x5e,0x28,0xba,0x42,0x3e,
1647 0xf0,0x91,0x42,0xf2,0x4f,0xbc,0x42,0x45,0xf7,0x96,0x42,0x08,0x27,0x54,0xbf,0x42,0x73,0x24,0x9d,0x42,
1648 0xa5,0xe8,0xc0,0x42,0x86,0xe0,0xa0,0x42,0xe4,0xca,0xc5,0x42,0xed,0x11,0xaa,0x42,0x08,0x54,0xaa,0xc8,
1649 0x42,0x86,0x40,0xb1,0x42,0x59,0x81,0xc5,0x42,0xa1,0x11,0xc4,0x42,0x3e,0xe7,0xbf,0x42,0xfb,0x8d,0xce,
1650 0x42,0x08,0xb4,0x6d,0xb7,0x42,0x30,0xc2,0xd9,0x42,0x46,0xf5,0xc9,0x42,0xdf,0x53,0xd9,0x42,0x38,0x40,
1651 0xcb,0x42,0x62,0x8f,0xcf,0x42,0x08,0x7d,0xf9,0xcc,0x42,0xec,0xa1,0xc2,0x42,0x07,0x43,0xcd,0x42,0x6c,
1652 0xdd,0xb8,0x42,0x2b,0x8b,0xcc,0x42,0x92,0xf5,0xaf,0x42,0x08,0xf9,0x8d,0xce,0x42,0x41,0x57,0xa7,0x42,
1653 0x5b,0xb8,0xd2,0x42,0xae,0x2f,0xa5,0x42,0x18,0x2f,0xd9,0x42,0x13,0x2a,0xa1,0x42,0x08,0x41,0x7e,0xdd,
1654 0x42,0xe3,0x03,0xa0,0x42,0x2e,0xf2,0xe1,0x42,0x7c,0x02,0x9f,0x42,0x1b,0x66,0xe6,0x42,0xa2,0x4a,0x9e,
1655 0x42,0x07,0x1b,0x66,0xe6,0x42,0xae,0x2f,0xa5,0x42,0x08,0x4d,0x63,0xe4,0x42,0x00,0x9e,0xa5,0x42,0xf4,
1656 0x16,0xe2,0x42,0x15,0x31,0xa6,0x42,0x99,0xca,0xdf,0x42,0x2b,0xc4,0xa6,0x42,0x08,0xc0,0x82,0xc6,0x42,
1657 0xc4,0xc2,0xa5,0x42,0x57,0xe1,0xd5,0x42,0x91,0xb5,0xd0,0x42,0x54,0xda,0xd0,0x42,0x97,0x93,0xd2,0x42,
1658 0x08,0x9c,0x3a,0xc7,0x42,0x17,0x58,0xdc,0x42,0x9c,0x0a,0xbf,0x42,0x6e,0xa4,0xde,0x42,0x90,0x25,0xb8,
1659 0x42,0xdf,0x53,0xd9,0x42,0x08,0x59,0x21,0xb5,0x42,0xf2,0xdf,0xd4,0x42,0x51,0x43,0xb3,0x42,0x91,0xb5,
1660 0xd0,0x42,0xc5,0x29,0xbb,0x42,0x0e,0x1a,0xca,0x42,0x08,0x65,0x36,0xc4,0x42,0xd0,0x07,0xbd,0x42,0x3e,
1661 0xe7,0xbf,0x42,0x37,0x09,0xbe,0x42,0x0c,0xea,0xc1,0x42,0xcd,0xd0,0xaf,0x42,0x08,0x2b,0x5b,0xc4,0x42,
1662 0x18,0x08,0xa3,0x42,0x67,0xa6,0xab,0x42,0x99,0x3c,0x94,0x42,0x5e,0x28,0xba,0x42,0x35,0xe2,0x87,0x42,